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

本文关键字:字符串 查找 位置 数组 预定义 | 更新日期: 2023-09-27 18:06:54

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

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

在一个TextBox内的Windows表单用户可以输入像这样的跳过区域:A,B,C,D...有验证和限制,只使用字母和逗号,所以输入是保证在这种格式。

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

string[] SkippedAreasFromForm = new string[17];
...
SkippedAreasFromForm = (txtSkippedAreas.Text).Split(',');
现在到了棘手的部分,我正在寻求帮助。用户必须输入Number of areas,例如- 3。这意味着他只处理ABC。如果区域的数量是2,那么他只能使用AB;如果区域的数量是4,那么A, B, CD都是可用的,以此类推。

我需要的是检查是否在与用户输入填充的数组SkippedAreasFromForm中有一个与上述标准不匹配的区域。

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

我现在拥有的是:

foreach (string tempAreaValue in SkippedAreasFromForm)
                {
                    for (int i = 0; i < SkippedAreasArray.Length; i++)
                    {
                        if (tempAreaValue == SkippedAreasArray[i])
                        {
                            if ((i + 1) > entity.AreasCnt)
                            {
                                MessageBox.Show("You must use areas only within the Number of Areas scope!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                txtSkippedAreas.Focus();
                                return false;
                            }
                        }
                    }
                }

对于少数几个测试,我使它工作。但首先,至少对我来说,这似乎过于复杂了。第二,我不确定这个算法是否完全按照我需要的那样工作,或者我只是幸运地得到了正确的结果。第三,我已经写了2个月的c#代码了,这对我来说似乎是一个很好的LINQ表达式的候选者——你认为使用LINQ会更好吗?我希望在转换过程中得到帮助。

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

我想你只是在寻找IndexOf:

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

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

如果您正在根据areannumber查找数组中从start index到max string elements的元素,则:

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 (from comment)

确定的区域内。
假设你的userInputArray是:
string[] userInputArray = new string[] {"A", "C", "H", "Q"};

那么您可以按照以下方式使用Enumerable.Except:

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