C# 比较字符串值数组

标签 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。用户使用的输入是一个下拉菜单,因此这仅用于确保我的值在保存之前不被篡改。

我的问题是哪种数据类型最适合这种情况:字符串数组/列表或字典?第二个问题是应该将其放置在哪里以避免线程问题,是在方法内部还是在方法外部?

编辑 - 我只是想补充一点,预定义的值将保持不变,所以我最终会将该字段设置为只读常量值。

编辑2 - 只是重新检查了我的代码,我不会使用CompareOrdinal,因为我完全忘记了顺序重要的部分。所以这将是一个关键的查找。所以我将删除该方法的内部,以免人们感到困惑。主要问题仍然是一样的。

感谢大家的帮助。

最佳答案

从可读性的角度来看,HashSet 是最好的类型,因为它专门针对“集合中存在项目”而存在。

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

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

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

关于C# 比较字符串值数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33907666/

相关文章:

c# - Visual Studio : find all references of a specific type

c# - 来自类的 DataAnnotations 验证

c# - 将多个图像文件发送到 mySQL

c - 初始化的字符数组指向同一内存

c# - String StartsWith() 丹麦语文本问题

c# - DLL 项目 - 知道哪个环境调用了它吗? (网络/窗口/cmd)

c# - 从 byte[] 创建 zip 并返回到浏览器

Java共享对象数组初始化错误

php - 为什么 PHP 在[宽松地]比较两个数字字符串之前将它们转换为数字?

java - 字符串池的意外行为