1

私がやろうとしているのは、いくつかのintが数字のリストで一貫していないかどうかを判断できるメソッドを作成することです(method欠落した数字を返す必要があります)

たとえば、次List<MyObject>のような場合:

class MyObject
{
   public string Name{ get; set;}
   public int Order{ get; set;}
   public MyObject(string name, int order)
   {
      Name = name;
      Order = order;
   }
}
List<MyObject> list = new List<MyObject>{new MyObject("1",1),new MyObject("2",2),new MyObject("4",4)};//and so on here can be even 100+ object
//or
list = new List<MyObject>{new MyObject("2",2), new MyObject("1",1), new MyObject("4",4)};

そして今、私が作ることができるこのAdd場合、欠損値を取得する必要があり ます:new MyObjectListOrder3

list = list.OrderBy(x=>x.Order);//this will sort my array

そして今、欠番があることを知るプログラムを作成する方法に行き詰まっていOrderますか?

私がやりたいことは明らかだと思います(そうでない場合は、お尋ねください)

編集: 注文番号は一意ではありません。

みんな助けてくれてありがとう

4

3 に答える 3

2

Enumerable.Exceptこの場合、非常に役立ちます。

int min = list.Min(o => o.Order);
int max = list.Max(o => o.Order);
var allNum = Enumerable.Range(min, max - min + 1);
IEnumerable<int> missingOrderNumbers = allNum.Except(list.Select(o => o.Order));
于 2013-02-15T15:52:37.327 に答える
1

最初に欠けているものだけが必要な場合は、次のようにします。

var firstMissing = list.OrderBy(x => x.Order)
                    .Select((x, i) => new {Index = i + 1, Item = x})
                    .FirstOrDefault(x => x.Index != x.Item.Order);

firstMissing が null の場合、欠落しているアイテムはありません。

firstMissing が null でない場合、FirstMissing.Index は、挿入する必要がある最初の不足アイテムの注文番号になります。最初の項目を 0 ではなく 1 から開始していると仮定していることに注意してください。

または、これは最初に欠落しているインデックスである int を返します。

var firstMissingIndex = list.OrderBy(x => x.Order)
                    .Where((x, i) => i + 1 != x.Order)
                    .Select(x => x.Order - 1)
                    .FirstOrDefault();
于 2013-02-15T15:49:07.593 に答える
1

これが私が提案するものです:

var max = 100;
var range = Enumerable.Range(1, max);
var intsNotInList = range.Except(list.Select(x => x.Order));

intsNotInListにその値を持つrange値がないすべての値が含まれます。次に、これらの結果をループしてリストに追加するのは非常に簡単です。listOrder

foreach (var i in intsNotInList)
{
    var obj = new MyObject() 
    {
        Name = i.ToString(),
        Order = i,
    };
    list.Add(obj);
}
于 2013-02-15T15:46:52.590 に答える