1

文字列を比較しています.Contains()が、問題が見つかりました:

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

「a1」で検索すると、「a10」、「a11」、「a1..」がヒットしています。の違いを比較する別の方法があります==

4

3 に答える 3

1

あなたのコメントに基づいて、あなたが探しているクエリは次のとおりだと思います。

var query = cluster.Where(kvp => kvp.Key
                                    .Split('-')
                                    .Contains("a" + i.ToString())  // Array.Contains, not String.Contains
                         )
                   .Select(kvp => kvp.Value);
于 2013-05-23T02:49:22.880 に答える
1

検索文字列が、大きな部分文字列のプレフィックスやサフィックスではなく、分離された部分文字列であることを確認したい場合は、正規表現を使用できます。たとえば、文字列に or が含まれていて、 or が含まれて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のデモです。

正規表現は、必要に応じて式を調整できるほど汎用性があります。正と負の先読み/後読みを使用できます。たとえば、の後に別の数字5続かない"a5(?!\\d)"ことを確認する必要がある場合は、 と書くことができます。

于 2013-05-23T02:30:54.620 に答える