7

リストに単語のリストがあります。.Contains()を使用して、単語がリストにあるかどうかを判断できます。指定した単語がリストにある場合、リストから大文字と小文字を区別する単語のスペルを取得するにはどうすればよいですか?たとえば、.Contains()は、単語が「リン酸ナトリウム」であるが、リストに「リン酸ナトリウム」が含まれている場合にtrueになります。大文字と小文字を区別しない検索(「リン酸ナトリウム」)を実行し、大文字と小文字を区別する一致(「リン酸ナトリウム」)をリストから返すにはどうすればよいですか?

キーが大文字で値が大文字である辞書、またはその逆の辞書は避けたいと思います。

4

3 に答える 3

17

あなたは次のようなものが欲しいです:

string match = list.FirstOrDefault(element => element.Equals(target, 
                                     StringComparison.CurrentCultureIgnoreCase));

一致するものが見つからない場合、これは参照として残さmatchれます。null

(を使用することもできますList<T>.Findが、を使用すると、文字列の任意のFirstOrDefaultシーケンスで機能するため、コードがより一般的になります-using System.Linq;ファイルの先頭にディレクティブがあります) 。)

リストにnull要素がないと仮定していることに注意してください。これを処理する場合は、代わりに静的メソッド呼び出しを使用することをお勧めしますstring.Equals(element, target, StringComparison.CurrentCultureIgnoreCase)

また、文化に敏感な比較が必要だと想定していることにも注意してください。StringComparison他のオプションについてはを参照してください。

于 2013-03-11T20:14:34.203 に答える
0

大文字と小文字を区別しない比較を使用した辞書が機能するかどうかを検討してください。語順を気にしない限りDictionary、リストよりもはるかに優れたルックアップのパフォーマンスが得られます。

Dictionary<string, string> openWith = 
      new Dictionary<string, string>( 
         StringComparer.CurrentCultureIgnoreCase);
于 2013-03-11T20:20:28.663 に答える
0

StringComparerリストで使用することもできます

if (listOfValues.Contains(value, StringComparer.OrdinalIgnoreCase))
于 2018-11-16T09:10:42.637 に答える