Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#比较字符串值数组_C#_Arrays_String Comparison - Fatal编程技术网

C#比较字符串值数组

C#比较字符串值数组,c#,arrays,string-comparison,C#,Arrays,String Comparison,我正在使用一个静态方法创建静态类,该方法比较一个字符串,其中填充了来自用户输入的选择,以及一个预定义的“应该是输入”数组 我关心的是预定义数组在类中的位置,以及要使用的正确数据类型是否实际上是数组或字典 我将在预定义的数组中最多有大约150个字符串,可以与字符串数组进行比较 这是我到目前为止所拥有的 public static class SelectionMatchHelper { static readonly string[] predefinedStrings = {"No a

我正在使用一个静态方法创建静态类,该方法比较一个字符串,其中填充了来自用户输入的选择,以及一个预定义的“应该是输入”数组

我关心的是预定义数组在类中的位置,以及要使用的正确数据类型是否实际上是数组或字典

我将在预定义的数组中最多有大约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;
    }

}
公共静态类SelectionMatchHelper
{
静态只读字符串[]预定义字符串={“无应答”、“黑色”、“金色”};
公共只读静态bool SelectionMatch(字符串[]stringswarearingagainst,int validCount)
{
int numberOfMatches=0;
对于(int x=0;x<“字符串数组的长度”;x++)
{
//将循环并检查该值是否存在,因为要匹配的数组并不总是具有相同的索引长度
numberOfMatches+=1;
}
numberOfMatches.Dump();
如果(numberOfMatches==0 | | numberOfMatchesvalidCount)返回false;
返回true;
}
}
这基本上是基于用户必须满足的参数数量,方法得到匹配项,如果不等于该数量,则返回false。用户正在使用的输入是一个下拉列表,因此这仅用于确保在保存之前我的值未被篡改

我的问题是,在这种情况下,什么样的数据类型最适合使用字符串数组/列表或字典?第二个问题是,为了避免线程问题,应该将其放置在什么位置,方法内部还是外部

编辑-我只想补充一点,预定义的值将保持不变,因此我将最终使该字段成为只读常量值

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


谢谢大家的帮助。

从可读性的角度来看,
HashSet
是最好的类型,因为它特别适用于“项目在集合中存在”

static readonly HashSet predefinedStrings=新HashSet(
新[]{“没有回答”、“黑色”、“金发碧眼”},
序列比较器);
if(预定义的strings.Contains(“bob”)。。。。

幸运的是,
HashSet
还提供了O(1)检查时间,如果需要,还支持不区分大小写的比较。

嘿,我同时阅读了你的答案并编辑了我的问题(没有双关语)。你的答案应该还是一样的,对吗?除非我将使用字符串数组值作为for循环中的查找键。@DenisCekic sure-只需根据哈希集检查单个项,如
stringswearearingagainst.Count(x=>predefinedStrings.Contains(x))
 static readonly HashSet<string> predefinedStrings = new HashSet<string>(
       new []{"No answer", "Black", "Blonde"}, 
       StringComparer.Ordinal);

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