簡體   English   中英

檢查是否列表<string>存在</string>

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM