我有这个预定义的字符串数组:
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/