对列表的对象(按日期)排序并删除最旧的对象,然后重新排序

时间:2018-02-08 20:54:43

标签: c#

我有对象,我为它们分配了条目日期,因此它们按日期排序,列表中最旧的必须用红色填充, 我想做的是

  1. 按照顺序从1到N。
  2. 我想按编号对它们进行排序,但根据它们的部件号,所以每个部件号都会有不同的顺序。
  3. 之后,它们将显示其输入日期并订购,然后我将知道哪一个必须是第一个被删除。

    当我删除一个时,下一个将是数字1,所有这些将被重新排序。

    我的代码如下:

    class Box
    {
    public string partNumber;
    public int fifo;
    public DateTime date;
    public int quantity;
    public int position;
    public int orderColumn;
    public int boxnum;
    
    public Caja(string partNumber, int fifo, int quantity, int position, DateTime date, int orderColumn, int boxnum)
    {
        this.partNumber = partNumber;
        this.fifo = fifo;
        this.quantity = quantity;
        this.position = position;
        this.date = date;
        this.orderColumn = orderColumn;
        this.boxnum = boxnum;
     }
    }
    

    这是订购对象的方法,以及它被卡住的地方:

    class BoxCollection : List<box>
    {
    
        public Color GetBoxColor(Box box)
        {
            return GetBoxColor(IndexOf(box));
        }
    
        public Color GetBoxColor(int index)
        {
    
            var firstBox = this.OrderBy(c => c.date)
                .First(c => c.partNumber == this[index].partNumber);
    
            return index == IndexOf(firstBox) ? Color.Red : Color.Green;
        }
        public  int GetBoxFifo(Box box)
        {
            return GetBoxFifo(IndexOf(box));
        }
        public int GetBoxFifi(int index)
        {
            var firstBox = this.OrderBy(c => c.date)
                 .First(c => c.partNumber == this[index].partNumber);
            return index == IndexOf(firstBox);
        }
    }
    

    我使用此方法对它们进行排序

    foreach(var p in objCajaCollection.OrderBy(c => c.fecha))
    {
            p.fifo = i;
           i++;
    }
    

    所以我的问题是我不知道如何使方法也按部件号分隔它们。 预期的输出是它显示多个列表,每个列表必须根据日期排序,但每个列表都有自己的顺序。

    我的想法是你按日期订购了盒子,但每个零件编号必须有自己的订单,所以如果我取下一个X零件编号的盒子,Y零件编号的顺序不会完全不改变。

    enter image description here

2 个答案:

答案 0 :(得分:0)

(如果您尝试查找索引,则不支持原始索引 - )

当我找到一种方法在点击互联网时对ListView进行排序时,我添加了一个包含原始列表项目编号的列(但只是为了帮助识别原始列表中的项目)。

Image of part of a ListView showing indexes as strings. (The ColumnHeaders are actually clickable.)

答案 1 :(得分:0)

    class Box
    {
        public string partNumber;
        public DateTime date;
        public int quantity;
        public int position;
        public int orderColumn;
        public int boxnum;

        public Box(string partNumber, int quantity, int position, DateTime date, int orderColumn, int boxnum)
        {
            this.partNumber = partNumber;
            this.quantity = quantity;
            this.position = position;
            this.fecha = date;
            this.orderColumn = orderColumn;
            this.boxnum = boxnum;
        }
    }

        class BoxCollection : List<Box>
    {

        public Color GetBoxColor(Box box)
        {
        return GetBoxColor(IndexOf(box));
    }

    public Color GetBoxColor(int index)
    {
        return GetBoxFifo(index) == 1 ? Color.Red : Color.Green;
    }

    public int GetBoxFifo(Box box)
    {
        return GetBoxFifo(IndexOf(box));
    }

    public int GetBoxFifo(int index)
    {
        return this.Where(c => c.partNumber == this[index].partNumber)
            .OrderBy(c=> c.date).ToList().IndexOf(this[index]) + 1;
    }

}