比较字符串与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"。还有一种比较==
根据你的评论,我认为你正在寻找的查询是:
var query = cluster.Where(kvp => kvp.Key
.Split('-')
.Contains("a" + i.ToString()) // Array.Contains, not String.Contains
)
.Select(kvp => kvp.Value);
如果您想确保您的搜索字符串是一个独立的子字符串,而不是一个更大的子字符串的前缀或后缀,您可以使用正则表达式。例如,要查看字符串是否包含a5
而不包含a52
或xa5
,您可以这样做:
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