比较字符串与linq

本文关键字:linq 字符串 比较 | 更新日期: 2023-09-27 18:15:00

我正在比较字符串与.Contains(),但我发现了一个问题:

foreach (var pair in cluster)
{
    if (pair.Key.Contains("a" + i.ToString()))
    {
         vlr = pair.Value;
    }
}

"a10","a11","a1.."是检索当我搜索"a1"。还有一种比较==

比较字符串与linq

的方法

根据你的评论,我认为你正在寻找的查询是:

var query = cluster.Where(kvp => kvp.Key
                                    .Split('-')
                                    .Contains("a" + i.ToString())  // Array.Contains, not String.Contains
                         )
                   .Select(kvp => kvp.Value);

如果您想确保您的搜索字符串是一个独立的子字符串,而不是一个更大的子字符串的前缀或后缀,您可以使用正则表达式。例如,要查看字符串是否包含a5而不包含a52xa5,您可以这样做:

if (Regex.Matches(input, "''ba5''b").Count > 0) ...

下面是一个例子:

Console.WriteLine(Regex.Matches("hello a5 world", "''ba5''b").Count > 0);  // True
Console.WriteLine(Regex.Matches("hello a55 world", "''ba5''b").Count > 0); // False
Console.WriteLine(Regex.Matches("hello xa5 world", "''ba5''b").Count > 0); // False

这是一个ideone的演示。

Regex是万能的,可以让你根据自己的需要调整表达式:你可以使用正向和反向向前看。例如,如果您需要确保5而不是后面跟着另一个数字,您可以写"a5(?!''d)" .

.Contains()检查字符串中是否包含子字符串或字符串

如果你想知道它们是否相等,你应该使用

if (pair.Key.Equals(i.ToString()))

string.Compare(pair.Key, i.ToString()) == 0