Compare list<sting> with foreach loop ignoring case c#
我有一个应用程序可以比较用户输入的两个LST数据。但是,当前,如果两个值相同,但一个为大写,则应用程序将其类化为不匹配。
现在我已经使用过
我目前的代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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(); } } |
您可以使用带此比较器的
1 2 3 4 5 6 7 | foreach (string line in mylistA) { if (mylistB.Contains(line, StringComparer.InvariantCultureIgnoreCase)) { ResultsToDocument(); } } |
更有效的方法是
1 2 | foreach(string line in mylistA.Intersect(mylistB, StringComparer.InvariantCultureIgnoreCase)) ResultsToDocument(); // does this make sense, not passing the line? |
试试这个:
1 2 3 4 5 6 7 | foreach (string line in mylistA) { if (mylistB.Any(b => b.Equals(line, StringComparison.OrdinalIgnoreCase))) { ResultsToDocument(); } } |
为了获得更好的性能和可读性,您可以使用
1 2 | foreach (var element in mylistA.Intersect(mylistB, StringComparer.OrdinalIgnoreCase)) ResultsToDocument(); |
如果
1 2 3 4 5 6 7 8 | var set = new HashSet<string>(mylistB, StringComparer.OrdinalIgnoreCase) foreach (string line in mylistA) { if (set.Contains(line)) { ResultsToDocument(); } } |
我会跟着:
1 2 3 4 5 6 7 8 9 10 | foreach (string lineA in mylistA) { foreach (string lineB in mylistB) { if (lineB.ToUpper() == lineA.ToUpper()) { ResultsToDocument(); } } } |
但可能有更好的解决方案来实现同样的结果