1. ホーム
  2. c#

[解決済み] リストに文字列を含む要素があるかどうかを確認し、その要素を取得する

2022-04-22 07:23:08

質問

この質問に対する回答を探しているうちに、LINQを利用した類似のものに出会いましたが、使いこなせていないため、十分に理解(つまり実装)できていません。私がしたいことは、基本的には、これです。

  1. リストのいずれかの要素に特定の文字列が含まれているかどうかを確認する。
  2. もしそうなら、その要素を取得する。

正直なところ、どうすればいいのかわかりません。私が思いつくのはこれです(もちろん、うまくいきませんが)。

if (myList.Contains(myString))
    string element = myList.ElementAt(myList.IndexOf(myString));

うまくいかない理由がわかりました。

  • myList.Contains() は返しません。 true というのは、リストの要素全体が、私が指定した文字列と一致するかどうかをチェックするからです。
  • myList.IndexOf() はオカレンスを見つけることができません。なぜなら、今回もそうですが、文字列にマッチする要素をチェックするからです。

それでも、この問題を解決する方法は全く分からないのですが、私のような類似の質問で提案されているように、LINQを使うしかないと思っています。もしそうだとしたら、回答者は彼らの例でLINQを使うことを説明してほしいです(言ったように、私はC#の時代にそれを気にしたことがありません)。よろしくお願いします。

EDIT: 解決策を思いつきました。リストをループして、現在の要素が文字列を含んでいるかどうかをチェックし、現在の要素に等しい文字列を設定するだけです。しかし、これよりも効率的な方法はないのでしょうか?

string myString = "bla";
string element = "";

for (int i = 0; i < myList.Count; i++)
{
    if (myList[i].Contains(myString))
        element = myList[i];
}

解決方法は?

ここでLinqが使えるようになるはずです。

var matchingvalues = myList
    .Where(stringToCheck => stringToCheck.Contains(myString));

単に最初にマッチした項目を返したい場合。

var match = myList
    .FirstOrDefault(stringToCheck => stringToCheck.Contains(myString));

if(match != null)
    //Do stuff