C#比较字符串值数组

时间:2015-11-25 02:44:18

标签: c# arrays string-comparison

我使用静态方法创建静态类,该方法比较填充了用户输入中的选择的字符串,以及“应该作为输入”的预定义数组;

我担心的是在类中放置预定义的数组,并且如果要使用的正确数据类型实际上是数组或字典。

我预先定义了大约150个字符串,并准备好与字符串数组进行比较。

这是我到目前为止所拥有的。

public static class SelectionMatchHelper
{
     static readonly string[] predefinedStrings = {"No answer", "Black", "Blonde"};
    public readonly static bool SelectionMatch(string[] stringsWeAreComparingAgainst, int validCount)
    {
        int numberOfMatches = 0;
         for (int x = 0; x < "length of string array"; x++)
                {
                    //will loop through and check if the value exists because the array to match against will not always have the same index length

                        numberOfMatches += 1;
                }
        numberOfMatches.Dump();
    if (numberOfMatches == 0 || numberOfMatches < validCount || numberOfMatches > validCount) return false;
                return true;
    }

}

这基本上做的是,基于用户必须满足的参数数量,方法获得匹配,如果它不等于该数量,则返回false。用户输入的输入是下拉列表,因此仅用于确保我的值在保存之前不被篡改。

我的问题是什么数据类型最适合这种情况的字符串数组/列表或字典?第二个问题是,为了避免线程问题,应该放在哪里,在方法内部还是出来?

编辑 - 我只想补充一点,预定义的值将保持不变,因此我最终会将该字段设为只读const值。

编辑2 - 重新检查我的代码我不会使用CompareOrdinal,因为我完全忘记了订单的重要部分。所以它将是一个关键的查找。所以我会删除方法的内部,所以人们不要混淆。主要问题仍然是一样的。

感谢大家的帮助。

1 个答案:

答案 0 :(得分:3)

从可读性的角度来看,HashSet是最好的类型,因为“项目存在于集合中”具体存在。

 static readonly HashSet<string> predefinedStrings = new HashSet<string>(
       new []{"No answer", "Black", "Blonde"}, 
       StringComparer.Ordinal);

if (predefinedStrings.Contains("bob"))....

幸运的是HashSetthread safe for read-only operations,提供O(1)检查时间并支持不区分大小写的比较(如果需要)。