C#LINQ,需要有关逻辑/算法的帮助

时间:2016-11-29 05:00:09

标签: c# algorithm linq

我有一个值列表,如下所示,左侧的数字表示要删除/插入的对象,其中“插入/删除”是采取的操作

1 insert
2 insert
3 insert
2 remove
4 insert
2 insert
3 remove
5 insert
3 insert
5 remove

我想要的最终结果是“5删除”。

因此,如果列表中移除的对象的位置大于插入的同一对象的位置,则它将被删除,其他将保持不变(将插入1,2,3,4)。我们能用LINQ吗?

2 个答案:

答案 0 :(得分:0)

假设您的课程Operation包含2个属性IDCRUD

public class Operation
{
    public int ID { get; set; }

    public string CRUD { get; set; }
}

var result = list.GroupBy(x => x.ID)
              .ToDictionary(x => x.Key, x => x.Last().CRUD);

//if you want to have same List<Operation>
list = list.GroupBy(x => x.ID)
            .Select(x=> new Operation { ID = x.Key, CRUD = x.Last().CRUD }).ToList();

此处dotNetFiddle

编辑:

public static void Main()
{
    List<Operation> list = new List<Operation>();

    Operation o1 = new Operation();
    o1.ID = 1;
    o1.CRUD = "Insert";
    list.Add(o1);

    Operation o2 = new Operation();
    o2.ID = 2;
    o2.CRUD = "Insert";
    list.Add(o2);

    Operation o3 = new Operation();
    o3.ID = 3;
    o3.CRUD = "Insert";
    list.Add(o3);

    Operation o4 = new Operation();
    o4.ID = 2;
    o4.CRUD = "Remove";
    list.Add(o4);

    Operation o5 = new Operation();
    o5.ID = 4;
    o5.CRUD = "Insert";
    list.Add(o5);

    Operation o6 = new Operation(){ID=2, CRUD = "Insert"};

    list.Add(o6);

    Operation o7= new Operation(){ID=3, CRUD = "Remove"};

    list.Add(o7);

    Operation o8= new Operation(){ID=5, CRUD = "Insert"};

    list.Add(o8);

    Operation o9= new Operation(){ID=3, CRUD = "Insert"};
    list.Add(o9);

    Operation o10= new Operation(){ID=5, CRUD = "Remove"};
    list.Add(o10);

    var result = list.GroupBy(x => x.ID).ToDictionary(x => x.Key, x => x.Last().CRUD);

    foreach(var item in result)
    {
        Console.WriteLine(item.Key + ": " + item.Value);
    }

    list = list.GroupBy(x => x.ID)
        .Select(x=> new Operation { ID = x.Key, CRUD = x.Last().CRUD }).ToList();

    Console.WriteLine("List values");

    foreach(var item in list)
    {
        Console.WriteLine(item.ID + ": " + item.CRUD);
    }

    //output for 5 is Remove.

}

public class Operation
{
    public int ID { get; set; }

    public string CRUD { get; set; }
}

答案 1 :(得分:-1)

不确定是否理解这个问题但yoiu可以检查最高ID是否等于“删除”,如下:

    public class MyList
    {
        public int Id { get; set; }
        public string ToDo { get; set; }
    }
    List<MyList> MyList = new List<MyList>();
    if ( MyList.OrderBy(c => c.Id).LastOrDefault().ToDo == "remove")
        {
            // Code to remove what need to be removed
        }
相关问题