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