Find substring in a list of strings

2020-01-29 06:57发布

I have a list like so and I want to be able to search within this list for a substring coming from another string. Example:

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

I want to search for "There" within my list and return "4234 - There". I've tried:

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

6条回答
ゆ 、 Hurt°
2楼-- · 2020-01-29 07:17

same problem i had to do.

You need this:

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

Where:

myList is List<String> has the values that myString has to contain at any position

So de facto you search if myString contains any of the entries from the list. Hope this is what you wanted...

查看更多
我只想做你的唯一
3楼-- · 2020-01-29 07:19

i like to use indexOf or contains

someString.IndexOf("this");
someString.Contains("this");
查看更多
贪生不怕死
4楼-- · 2020-01-29 07:26

What you've written causes the compile error

The best overloaded method match for 'string.Substring(int)' has some invalid arguments

Substring is used to get part of string using character position and/or length of the resultant string.

for example srch.Substring(1, 3) returns the string "her"

As other have mentioned you should use Contains which tells you if one string occurs within another. If you wanted to know the actual position you'd use IndexOf

查看更多
等我变得足够好
5楼-- · 2020-01-29 07:28

And for CaseSensitive use:

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

OR

YourObj yourobj = list.FirstOrDefault(obj => obj.SomeString.ToUpper().Contains("some substring"));
查看更多
Luminary・发光体
6楼-- · 2020-01-29 07:33

To return all th entries:

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

Only the first one:

string result = list.FirstOrDefault(s => s.Contains(search));
查看更多
beautiful°
7楼-- · 2020-01-29 07:38

With Linq, just retrieving the first result:

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

To do this w/o Linq (e.g. for earlier .NET version such as .NET 2.0) you can use List<T>'s FindAll method, which in this case would return all items in the list that contain the search term:

var resultList = list.FindAll(delegate(string s) { return s.Contains(srch); });
查看更多
登录 后发表回答