C# - 在预定义的字符串数组中查找字符串的位置

时间:2013-04-01 09:29:01

标签: c# arrays string

我有一个预定义的字符串数组,其中包含AQ的字母:

string[] SkippedAreasArray = new string[] {"A", "B", "C", "D", "E", "F", "G",
            "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q"};

在Windows窗体内的TextBox中,用户可以输入skippedAreas,如下所示:A,B,C,D...有验证和限制只能使用字母和逗号,因此保证输入采用此格式。

我所做的是获取用户输入并填充另一个字符串数组:

string[] SkippedAreasFromForm = new string[17];
...
SkippedAreasFromForm = (txtSkippedAreas.Text).Split(',');

现在是我寻求帮助的棘手部分。用户必须输入Number of areas例如 - 3.这意味着他只使用ABC。如果区域数为2,则只有AB,如果区域数为4,则ABC和{ {1}}可用,等等。

我需要的是检查填充了用户输入的数组D中是否存在与上述条件不匹配的区域。

这在编码方面意味着什么 - 我需要从SkippedAreasFromForm中获取每个元素,从预定义的SkippedAreasFromForm中取出它的整数值,并查看此值是否等于或大于(> =)他作为“区域数量”输入的值。如果某个区域超出所选数字的范围,则应显示错误。

我现在拥有的是:

SkippedAreasArray

对于少数测试我做了它。但首先 - 至少对我而言似乎过于复杂。第二 - 我不确定这个算法是否正常工作,或者我只是运气得到了正确的结果。第三 - 我现在正在编写C#2个月,这对我来说似乎是LINQ表达的一个很好的候选者 - 你认为使用LINQ会更好吗?我会感谢你在转换中的帮助。

2 个答案:

答案 0 :(得分:5)

我认为您只是在寻找IndexOf

int index = SkippedAreasArray.IndexOf(tempAreaValue);
if (index >= entity.AreasCnt)
{
    ...
}

(您可能还想检查index是否为-1,如果该元素根本不在列表中,则会发生这种情况。另外,请考虑重复 - 用户可以输入{{1} },AA?)

答案 1 :(得分:1)

如果要查找数组中从起始索引到基于areaNumber的最大字符串元素的元素,则:

int areaNumber = 4;
var result = SkippedAreasArray.Select((r, i) => new { Value = r, Index = i })
                              .Where(r => r.Index <= areaNumber - 1)
                              .Select(r => r.Value)
                              .ToArray();

对于areaNumber 4,您将获得"A", "B", "C", "D"

修改

  

我正在查看用户输入的每个元素(即数组)   A,C,H,Q ..)位于由areNumber 确定的区域内(来自评论)

假设您的userInputArray是:

string[] userInputArray = new string[] {"A", "C", "H", "Q"};

然后您可以通过以下方式使用Enumerable.Except

if(result.Except(userInputArray).Any())
{
  //Invalid
}
else
{
 //Valid
}