如何检查序列中缺少的元素

时间:2011-09-02 12:39:19

标签: c# asp.net c#-2.0

我正在做一个与工资单相关的项目,我将为每个已经运行的工资单提供一些payperiodnumbers。我将在网格视图中显示所有工资单,并显示相应的工资期数。

假设我绑定到网格时得到以下结果

enter image description here

现在从网格中,如果我选择1并点击删除,我想显示一条错误消息,说明您必须先删除最长工资期。

就像那样,如果我的最大工资期数为7,如果用户选择1,2,3,4,5,6并尝试删除我想显示相同的错误。我将选定的ID's保存在一个arraylist中,所以任何人都可以帮助我如何检查我指定的条件。我可以使用查询获得最大的payperiodid,但我想做的其余代码。

我正在使用2.0,所以没有必要在这里使用LINQ。任何人都可以帮助我

正如Azodious指出的那样,我表现出一些应该有效的条件,有些则不是

如果最大数量为7,如果我选择1,5,7我想显示错误消息。

如果我选择5,6,7,则应将其删除。

2 个答案:

答案 0 :(得分:0)

这样的事情:

selectedNumbers.Sort();
selectedNumbers.Reverse();

int maxPeriodNumber = 5; // This you know
int lastValue = (int)selectedNumbers[0];

if (lastValue < maxPeriodNumber)
{
    // Highest selected number is smaller than required, warn user or throw exception
    return;
}

foreach (int val in selectedNumbers)
{
    if (val < (lastValue - 1))
    {
        // There is a gap in the numbering, warn user or throw exception
        return;
    }

    lastValue = val;
}

// When you end up here, everything is ok and you can delete the items whose numbers are in the list

答案 1 :(得分:0)

显示缺失数字的简单逻辑

ArrayList a = new ArrayList();
List<int> lst = new List<int>();
lst.Add(1);
lst.Add(3);
lst.Add(5);
int fst = (int)lst[0];
int last = 0;
for (int i = 0; i < lst.Count; i++)
{
   last = (int)lst[i];
 }
for (int k = fst; k <= last; k++)
{
 if (k == fst | k == last)
   {
   }
 else
 {
    a.Add(k);
    a.Add(" ");
 }
}
   Label1.Text = "Missing Numbers are" + " " + System.String.Concat(a.ToArray());