Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using List<string>.Any() to find if a string contains an item as well as find the matching item?

I have a list of strings, which can be considered 'filters'.

For example:

List<string> filters = new List<string>();
filters.Add("Apple");
filters.Add("Orange");
filters.Add("Banana");

I have another list of strings, which contains sentences.

Example:

List<string> msgList = new List<string>();
msgList.Add("This sentence contains the word Apple.");
msgList.Add("This doesn't contain any fruits.");
msgList.Add("This does. It's a banana.");

Now I want to find out which items in msgList contains a fruit. For which, I use the following code:

foreach(string msg in msgList)
{
    if(filters.Any(msg.Contains))
    {
        // Do something.
    }
}

I'm wondering, is there a way in Linq where I can use something similar to List.Any() where I can check if msgList contains a fruit, and if it does, also get the fruit which matched the inquiry. If I can get the matching index in 'filters' that should be fine. That is, for the first iteration of the loop it should return 0 (index of 'Apple'), for the second iteration return null or something like a negative value, for the third iteration it should return 2 (index of 'Banana').

I checked around in SO as well as Google but couldn't find exactly what I'm looking for.

like image 279
Sach Avatar asked Feb 06 '23 17:02

Sach


1 Answers

You want FirstOrDefault instead of Any.

FirstOrDefault will return the first object that matches, if found, or the default value (usually null) if not found.

like image 123
Gabriel Luci Avatar answered Feb 08 '23 05:02

Gabriel Luci