[英]Check if list contains element that contains a string and get that element
在尋找這個問題的答案時,我遇到了類似的使用 LINQ 的問題,但我無法完全理解它們(並因此實現它們),因為我不熟悉它。 基本上,我想要的是:
老實說,我不知道我會怎么做。 我能想到的是這個(當然不工作):
if (myList.Contains(myString))
string element = myList.ElementAt(myList.IndexOf(myString));
我知道為什么它不起作用:
myList.Contains()
不返回true
,因為它會檢查列表的整個元素是否與我指定的字符串匹配。myList.IndexOf()
不會找到匹配項,因為它會再次檢查與字符串匹配的元素。盡管如此,我仍然不知道如何解決這個問題,但我認為我必須按照與我的類似問題中的建議使用 LINQ。 話雖如此,如果是這種情況,我希望回答者向我解釋在他們的示例中使用 LINQ(正如我所說,我在使用 C# 的時候並沒有為此煩惱)。 提前謝謝你們(和女孩?)。
編輯:我想出了一個解決方案; 只需遍歷列表,檢查當前元素是否包含字符串,然后設置一個等於當前元素的字符串。 不過,我想知道還有比這更有效的方法嗎?
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
基本答案是:您需要遍歷循環並檢查任何包含指定字符串的元素。 所以,讓我們說代碼是:
foreach(string item in myList)
{
if(item.Contains(myString))
return item;
}
等效但簡潔的代碼是:
mylist.Where(x => x.Contains(myString)).FirstOrDefault();
這里,x 是一個參數,其作用類似於上述代碼中的“item”。
string result = myList.FirstOrDefault(x => x == myString)
if(result != null)
{
//found
}
for (int i = 0; i < myList.Length; i++)
{
if (myList[i].Contains(myString)) // (you use the word "contains". either equals or indexof might be appropriate)
{
return i;
}
}
舊時尚循環幾乎總是最快的。
如果你想要一個包含你的字符串的字符串列表:
var newList = myList.Where(x => x.Contains(myString)).ToList();
另一種選擇是使用 Linq FirstOrDefault
var element = myList.Where(x => x.Contains(myString)).FirstOrDefault();
請記住, Contains
方法區分大小寫。
這里有很多很好的答案,但我使用了一個簡單的Exists ,如下所示:
foreach (var setting in FullList)
{
if(cleanList.Exists(x => x.ProcedureName == setting.ProcedureName))
setting.IsActive = true; // do you business logic here
else
setting.IsActive = false;
updateList.Add(setting);
}
您可以使用 Linq 的FirstOrDefault
擴展方法:
string element = myList.FirstOrDefault(s => s.Contains(myString));
這將返回包含子字符串myString
第一個元素,如果沒有找到這樣的元素,則返回null
。
如果您只需要索引,請使用List<T>
類的FindIndex
方法:
int index = myList.FindIndex(s => s.Contains(myString));
這將返回包含子字符串myString
的第一個元素的索引,如果沒有找到這樣的元素,則返回-1
。
你應該可以使用這樣的東西,它對我來說沒問題:
var valuesToMatch = yourList.Where(stringCheck => stringCheck.Contains(myString));
或類似的東西,如果您需要查看它不匹配的地方。
var valuesToMatch = yourList.Where(stringCheck => !stringCheck.Contains(myString));
為了保持簡單,請使用它;
foreach(string item in myList)//Iterate through each item.
{
if(item.Contains("Search Term")//True if the item contains search pattern.
{
return item;//Return the matched item.
}
}
或者,要使用 for 循環執行此操作,請使用 this;
for (int iterator = 0; iterator < myList.Count; iterator++)
{
if (myList[iterator].Contains("String Pattern"))
{
return myList[iterator];
}
}
您可以使用
var match=myList.Where(item=>item.Contains("Required String"));
foreach(var i in match)
{
//do something with the matched items
}
LINQ 為您提供了“查詢”任何數據集合的功能。 您可以在集合(這里是字符串的集合(列表))上使用類似數據庫查詢(選擇、位置等)的語法。
所以你正在做“從滿足給定條件的列表中獲取項目”
在您使用“lambda 表達式”的地方
簡單地說 lambda 表達式類似於(輸入參數 => 返回值)
所以對於參數“item”,它返回“item.Contains(“required string”)”。 因此,如果該項目包含字符串並因此從列表中選擇它,則它返回 true,因為它滿足條件。
我還沒有在其他答案中看到 bool 選項,所以我希望下面的代碼可以幫助某人。
只需使用Any()
string myString = "test";
bool exists = myList
.Where(w => w.COLUMN_TO_CHECK.Contains(myString)).Any();
可以組合 Any、Where、First 和 FirstOrDefault; 或者只是根據需要將謂詞放在任何這些方法中。
您可能應該避免使用 First,除非您想在找不到匹配項時拋出異常。 FirstOrDefault 通常是更好的選擇,只要您知道如果找不到匹配項,它將返回類型的默認值(字符串的默認值是 null,int 是 0,bool 是 false 等)。
using System.Collections.Generic;
using System.Linq;
bool exists;
string firstMatch;
IEnumerable<string> matchingList;
var myList = new List<string>() { "foo", "bar", "foobar" };
exists = myList.Any(x => x.Contains("o"));
// exists => true
firstMatch = myList.FirstOrDefault(x => x.Contains("o"));
firstMatch = myList.First(x => x.Contains("o"));
// firstMatch => "foo"
firstMatch = myList.First(x => x.Contains("dark side"));
// throws exception because no element contains "dark side"
firstMatch = myList.FirstOrDefault(x => x.Contains("dark side"));
// firstMatch => null
matchingList = myList.Where(x => x.Contains("o"));
// matchingList => { "foo", "foobar" }
您可以通過多種方式檢查列表是否為空。
1)檢查列表為空,然后檢查計數大於零,如下所示:-
if(myList!=null && myList.Count>0)
{
//List has more than one record.
}
2) 使用如下 linq 查詢檢查列表 null 和計數大於零:-
if(myList!=null && myList.Count>0)
{
//List has more than one record.
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.