c# - 从列表<>中动态删除和添加另一个字母,保持字母顺序

标签 c# arrays string list

我有这个预定义的字符串数组:

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

根据用户输入,我填充 List<string>像这样:

List<String> UsedAreas = new List<String>();
int RangeOfInput = (int)entity.AreasCnt;
UsedAreas = SkippedAreasArray.ToList().GetRange(0, RangeOfInput);

另外,从用户输入中,我得到另一个包含来自 A to Q 的非重复字母的字符串。 (如 SkippedAreasArray )。

数组的构成如下:

SkippedAreasFromForm = (txtSkippedAreas.Text).ToUpper().Split(',');

我首先要做的是 - 对 SkippedAreasFromForm 进行排序:

Array.Sort<string>(SkippedAreasFromForm);

然后我需要以下内容:

foreach (string tempAreaValue in SkippedAreasFromForm)
{
    if (UsedAreas.Contains(tempAreaValue))
    {

    }
    else 
    { 

    }
}

如果List<> UsedAreas包含选中的字母 我想从列表中删除该字母,同时添加按字母顺序排列的下一个字母。

附注

我现在发现我的目标不明确,所以我会解释一下它的含义:

SkippedAreasFromForm是应该验证的用户输入,这就是需要此算法的想法。如果在某种情况下if (UsedAreas.Contains(tempAreaValue))返回 false 则输入错误,我需要返回错误消息。

最佳答案

您可以使用 LINQ to Objects 来实现这一点,而无需循环:

UsedAreas = SkippedAreasArray.Except(SkippedAreasFromForm)
                             .OrderBy(e => e)
                             .Take(RangeOfInput)
                             .ToList();

需要 RangeOfInput来自SkippedAreasArray的元素不在 SkippedAreasFromForm 中。结果是List<string> .

更新

您可以通过这种方式检查错误消息情况:

if(SkippedAreasFromForm.Except(SkippedAreasArray.Take(RangeOfInput)).Any())
{
    // incorrect user input
}

关于c# - 从列表<>中动态删除和添加另一个字母,保持字母顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15757684/

相关文章:

c# - WPF 数据访问层体系结构

javascript - 为另一个函数保留 JQuery 变量(全局变量?)

arrays - 正则表达式:保留文本后的最后一个单词

c# - 从完全限定的方法名称中拆分参数

c++ - 如何在 C++ 中将 std::string 转换为 const char

c# - 内存未释放 .Net 应用程序

c# - 尝试使用 AxAcroPDFLib 打开 PDF

c# - 布局页面中的 asp.net mvc 登录表单(未找到部分 View 'LogIn')

arrays - 如何为具有不同参数的函数声明函数指针数组?

c++ - 将一段文本读入字符串 vector