web-dev-qa-db-ja.com

文字列のリストで部分文字列を検索

そのようなリストがあり、このリスト内で別の文字列からの部分文字列を検索できるようにしたいと思います。例:

List<string> list = new List<string>();
string srch = "There";
list.Add("1234 - Hello");
list.Add("4234 - There");
list.Add("2342 - World");

リスト内で"There"を検索し、"4234 - There"を返します。私はもう試した:

var mySearch = list.FindAll(S => s.substring(srch));
foreach(var temp in mySearch)
{
    string result = temp;
}
19
user1380621

Linqでは、最初の結果を取得するだけです。

string result = list.FirstOrDefault(s => s.Contains(srch));

Linqなしでこれを行うには(たとえば、.NET 2.0などの以前の.NETバージョンの場合)、List<T>FindAllメソッド。この場合、検索語を含むリスト内のすべてのアイテムを返します。

var resultList = list.FindAll(delegate(string s) { return s.Contains(srch); });
26
BrokenGlass

すべてのエントリを返すには:

IEnumerable<string> result = list.Where(s => s.Contains(search));

最初のもののみ:

string result = list.FirstOrDefault(s => s.Contains(search));
11
abatishchev

あなたが書いたものがコンパイルエラーの原因になります

「string.Substring(int)」に最適なオーバーロードメソッドの一致には、無効な引数があります

部分文字列は、結果の文字列の文字位置や長さを使用して文字列の一部を取得するために使用されます。

たとえば、srch.Substring(1, 3)は文字列「her」を返します

他の人が言及したように、ある文字列が別の文字列内にあるかどうかを示すContainsを使用する必要があります。実際の位置を知りたい場合は、IndexOfを使用します

1
Conrad Frix

indexOfまたはcontainsを使用したい

someString.IndexOf("this");
someString.Contains("this");
0
unarity

CaseSensitiveの場合:

YourObj yourobj = list.FirstOrDefault(obj => obj.SomeString.ToLower().Contains("some substring"));

OR

YourObj yourobj = list.FirstOrDefault(obj => obj.SomeString.ToUpper().Contains("some substring"));
0
Diego Venâncio

私がしなければならなかった同じ問題。

あなたにはこれが必要です:

myList.Where(listStrinEntry => myString.IndexOf(listStringEntry) != -1)

どこ:

myListList<String>には、myStringが任意の位置に含める必要がある値があります

つまり、myStringにリストのエントリのいずれかが含まれている場合は事実上検索します。これがあなたの望むものであることを望みます...

0
a joka