簡體   English   中英

比較清單 <sting> 與foreach循環忽略大小寫c#

[英]Compare list<sting> with foreach loop ignoring case c#

我有一個應用程序可以比較用戶輸入的兩個數據。 但是,當前,如果兩個值相同但一個為大寫,則應用程序將此分類為不匹配。

現在,我以前使用過StringComparison.InvariantCultureIgnoreCase ,但是我不確定如何在foreach循環中添加它。

我當前的代碼如下:

List<string> mylistA = new List<string>();
List<string> mylistB = new List<string>();

if (listATextBox.LineCount > 0) 
    for (int i = 1; i <= listATextBox.LineCount; i++) 
        mylistA.Add(listATextBox.GetLineText(i - 1).Replace(Environment.NewLine, "").Trim());

if (listBTextBox.LineCount > 0) 
    for (int i = 1; i <= listBTextBox.LineCount; i++) 
        mylistB.Add(listBTextBox.GetLineText(i - 1).Replace(Environment.NewLine, "").Trim());

foreach (string line in mylistA)
{             
    if (mylistB.Contains(line))
    {
            ResultsToDocument();
    }
}

您可以將Enumerable.Contains與此比較器一起用作參數,而不是List.Contains

foreach (string line in mylistA)
{
    if (mylistB.Contains(line, StringComparer.InvariantCultureIgnoreCase))
    {
        ResultsToDocument();
    }
}

一種更有效的方法是Intersect ,它也具有以下重載:

foreach(string line in mylistA.Intersect(mylistB, StringComparer.InvariantCultureIgnoreCase))
     ResultsToDocument(); // does this make sense, not passing the line?

嘗試這個:

foreach (string line in mylistA)
{
    if (mylistB.Any(b => b.Equals(line, StringComparison.OrdinalIgnoreCase)))
    {
        ResultsToDocument();
    }
}

為了獲得更好的性能和可讀性,您可以使用Intersect

foreach (var element in mylistA.Intersect(mylistB, StringComparer.OrdinalIgnoreCase))
   ResultsToDocument();

如果mylistA中有重復mylistA需要保留。 使用哈希集進行查找將是正確的方法,並且具有與相交解決方案相同的性能。

var set = new HashSet<string>(mylistB, StringComparer.OrdinalIgnoreCase)
foreach (string line in mylistA)
{             
    if (set.Contains(line))
    {
         ResultsToDocument();
    }
}

我會去:

    foreach (string lineA in mylistA)
    {     
       foreach (string lineB in mylistB)
       {                     
            if (lineB.ToUpper() == lineA.ToUpper())
            {
                  ResultsToDocument();
            }
       }
    }

但是可能有更好的解決方案可以達到相同的結果

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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