[英]Check if List<string> exists
這是我的代碼
List<string> list = new List<string>() { "bfd", "jy", "aaaaa", "ndnk", "ntfn", "gfm", "gfm", "mhgd5h", "srsr", "ntr", "mtmyt", "dmy", "mmy6", "ngn9d", "y6m1", "d8dm", "bbbbb", "tym", "dmj", "trsh", "tsr"};
List<string> test = new List<string>() {"aaaaa","bbbbb","ccccc","ddddd","eeeee","fffff","ggggg" };
foreach (var a in list)
{
foreach (var i in test)
{
if (i.StartsWith(a) == false)
{
Console.WriteLine(i);
}
}
}
我想從列表中找到 output 並在測試中匹配。 如果測試存在,則不會顯示。 如果沒有側輸出,但可能是我的代碼有問題,會多次出現output相同的值
列表中包含aaaaa,按邏輯aaaaa不應該是output
試試這個:
List<string> list = new List<string>(){"bfd", "jy", "aaaaa", "ndnk", "ntfn", "gfm", "gfm", "mhgd5h", "srsr", "ntr", "mtmyt", "dmy", "mmy6", "ngn9d", "y6m1", "d8dm", "bbbbb", "tym", "dmj", "trsh", "tsr"};
List<string> test = new List<string>(){"aaaaa", "bbbbb", "ccccc", "ddddd", "eeeee", "fffff", "ggggg"};
foreach (var a in list)
{
if (!test.Contains(a))
{
Console.WriteLine(a);
}
}
有使用 LINQ 的簡單解決方案。但由於我假設這是一個練習,我將向您展示使用循環的詳細版本。
問題是WriteLine
在內循環中。 因此你會得到很多重復。 將測試結果存儲在 Boolean 變量中,並將顯示部分放在內部循環之后。
foreach (var a in list)
{
bool found = false;
foreach (var i in test)
{
if (i.StartsWith(a))
{
found = true;
break; // Exit the inner loop
}
}
if (!found)
{
Console.WriteLine(a); // We must output a here since i out of scope.
}
}
此外,如果您想知道列表中是否包含特定字符串,您應該將i.StartsWith(a)
替換為i == a
。
如果將列表搜索提取到它自己的方法中,代碼將變得更易於閱讀
private bool IsInList(List<string> list, string item)
{
foreach (string s in list)
{
if (s == item)
{
return true;
}
}
return false;
}
現在,您不再需要 Boolean 變量
foreach (var a in list)
{
if (!IsInList(test, a))
{
Console.WriteLine(a);
}
}
我使用!condition
(發音:“not condition”)而不是condition == false
。 它更簡潔。
我認為這是一個練習。 在生產代碼中,您只需使用列表的內置方法Contains 。
foreach (var a in list)
{
if (!test.Contains(a))
{
Console.WriteLine(a);
}
}
甚至(正如@mjwills 在他的評論中建議的那樣):
foreach (var a in list.Except(test)) {
Console.WriteLine(a);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.