[英]Remove and reorder list elments
是否可以僅使用C#Linq或lambda表達式而無需使用C#循環(foreach; for; while;等)來解決以下問題?
問題:給定Task對象列表和已刪除TaskId列表。 我想該列表僅與不在刪除TaskID的列表中的要素更新,剩下的任務元素重新排序了。
(1*) Given a list of Task objects:
TaskId Group Name Order
281 1 "abc" 1
726 1 "dre" 2 // note: will be removed
9891 1 "euf" 3 // note: will be removed
87 1 "wop" 4
932 1 "hjd" 5
102 2 "fhl" 1 // note: will be removed
44 2 "bgg" 2
30 2 "qds" 3
293 2 "djf" 4 // note: will be removed
389 2 "hkd" 5
12 3 "hjf" 1
900 3 "xdf" 2 // note: will be removed
(2*) Given a list of removed TaskIds:
TaskId
726
9891
102
293
900
現在,在基於列表(2 *)刪除列表(1 *)之后,我希望列表(1 *)看起來像(注意:其余元素的順序也被更新了):
列表(1 *)已更新:
TaskId Group Name Order
281 1 "abc" 1
87 1 "wop" 2 // note: new order
932 1 "hjd" 3 // note: new order
44 2 "bgg" 1 // note: new order
30 2 "qds" 2 // note: new order
389 2 "hkd" 3 // note: new order
12 3 "hjf" 1 // note: order is kept unchanged.
Task類的定義如下:
public class Task {
public int TaskId { get;set; }
public int Group { get; set;}
public string Name { get; set; }
public int Order { get; set;}
}
先感謝您。
var tasks = new[]{
new Task{TaskId = 281, Group = 1, Name = "abc", Order =1},
new Task{TaskId = 726 , Group = 1, Name = "dre", Order =2},
new Task{TaskId = 9891, Group = 1, Name = "euf", Order =3},
new Task{TaskId = 102, Group = 2, Name = "wop", Order =1},
new Task{TaskId = 44, Group = 2, Name = "wop", Order =2},
new Task{TaskId = 30, Group = 2, Name = "wop", Order =3},
new Task{TaskId = 293, Group = 2, Name = "wop", Order =4},
new Task{TaskId = 295, Group = 3, Name = "was", Order =1},
};
int[] itemsToRemove = {726, 102, 293};
tasks.Where(task => !itemsToRemove.Contains(task.TaskId))
.GroupBy(task => task.Group)
.SelectMany(grp => grp.Select((task, grpIndex) =>
{ task.Order = grpIndex + 1; return task; }));
這樣的回報:
TaskId Group Name Order
281 1 abc 1
9891 1 euf 2
44 2 wop 1
30 2 wop 2
295 3 was 1
List<Task> tasksList = new List<Task>();
List<int> tasksIds = new List<int>();
List<Task> resultList = tasksList.FindAll(task => !taskIds.Contains(task.TaskId));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.