2016-09-20 15 views
0

文字列のリストを検索しようとしています。私は文字列からの情報を含む見つかった結果を返すことができるようにしたい。たとえば:リスト内で指定された文字列を検索中

は、リストの文字列は

"犬"、 "猫"、 "犬小屋"、 "元首"、 "マウス"

が含まれています(私はすでに値のリストを持っています)私は、例えば、文字列をチェックする方法をしたい:

string dog = "dog" 

と戻り値:

「犬」、「犬小屋」、「元首」

これは私が助けを必要と少なくとも一部、私がこれまで持っているものです。

Console.WriteLine("What would you like to search for (Title: Full Title; Author: first, last): "); 
search = Console.ReadLine(); 

var results = bookList.Where(x => x.Contains(search)).ToList(); 
if (results != null) 
{ 
    Console.WriteLine(results); 
    //i--; 
    search = String.Empty; 
    clearvars results; 
    Console.WriteLine("Press Enter to continue"); 
    Console.ReadLine(); 
    continue; 
} 

search

bookList空の文字列である私のList<string>

iがあれば、私はforループでこの全体のことをやっています。この

のためだけのカウンターではなく、本当に必要ですそれは何かを変える。

+2

[投稿してくださいあなたが登録している正確な本のタイトルだけでなく、あなたが探している正確な文字列を含んでいます。今はどちらも見えないので、なぜそれがうまくいかないのかを推測する必要があります。たとえば、 'string.Contains'は大文字と小文字が区別されるので、リスト内の書籍のタイトルが「Doghouse」の場合、「dog」(小文字のd) tマッチ。 –

+0

現在、ユーザは書籍のタイトルを入力します。大文字と小文字が区別されるかどうかは、私にとっては重要ではありません。また、あなたが探しているものは、ユーザーによって入力されます。申し訳ありません... – DatDudeAgain

+1

あなたは私を誤解しました。私はあなたのプログラムを変更するつもりではありませんでした。私は同じ問題を抱えるこの質問の例を作成することを意味しますが、コードを見ることができるほど完全です。たとえば、あとで「ああ、ちなみに、ユーザーがDoghouseという本のタイトルを入力してから犬を探している」と言えば、上記の私のコメントに戻ります。ユーザーが何をしているのかわからないので、私たちがあなたを助けることができるように、特定のケースを再現してください。さもなければ私達ができるのは推測です。 –

答えて

1

あなたは結果のすべての要素(results変数)に反復処理する必要があります。

+0

ありがとう、これは完全に動作します。また、すべてを説明してくれてありがとう。 – DatDudeAgain

+0

@DatDudeAgainようこそ – inwenis

1

あなたは結果を反復処理するforeachのようなループを必要とする:あなたはを言ったようにresultsstringsの一覧であるため、

foreach (var item in results) 
{ 
    Console.WriteLine(item); 
} 

はので、私はどの見出された結果を返すことができるようにしたいが、あなたはリスト内の各項目を印刷するには、リストを繰り返し処理する必要があります。

string[] searchList = new[] { "dog", "cat", "doghouse", "doge", "mouse" }; 
string searchString = "dog"; 
var matches = searchList.Where((x) => Regex.IsMatch(x, searchString)); 
+0

この場合のアイテムは何ですか? – DatDudeAgain

+1

@DatDudeAgain [Documentation for foreach](https://msdn.microsoft.com/en-us/library/ttw7t8t6.aspx)を見て、どの項目が –

+0

@SamIamなのかを判断できるはずです! – DatDudeAgain

0

は、ここに1つの方法です。

Console.WriteLine("What would you like to search for (Title: Full Title; Author: first, last): "); 
search = Console.ReadLine(); 
var results = bookList.Where(x => x.Contains(search)).ToList(); 
if (results != null) 
{ 
    foreach (var result in results) 
    { 
     Console.WriteLine(result); 
    } 
    Console.WriteLine("Press Enter to continue"); 
    Console.ReadLine(); 
} 

resultsこれはリストなので反復処理が必要です。リストをConsole.WriteLine()に渡すときは、Console.WriteLine(results)ToString()というメソッドがresultsで呼び出されます。 リストのToString()を呼び出すと、コンソールでおそらく見たことがあるSystem.Collections.Generic.List1[System.String]が返されます。

System.Collections.Generic.List1[System.String]はリストオブジェクトの文字列ですが、本当に関心のあるのはリストの要素です。このため、リストのitereteと各要素を個別に印刷する必要があります。

また、1つの文字列にresultsリストのすべての要素を結合し、それを印刷することができます:

var allResultsInOneString = string.Join(", ", results); 
Console.WriteLine(allResultsInOneString); 
0

あなたは、LINQを使用したい場合は、あまりにもこれを行うことができます:

bookList.Where(x => x.Contains(search)).ToList().ForEach(x => Console.WriteLine(x)); 
関連する問題