【发布时间】:2019-10-23 11:18:24
【问题描述】:
假设我有一个这样的通用列表:
var categories = new List<Category>() {
new Category() { sequence = 3, categoryName = "Category F" },
new Category() { sequence = 1, categoryName = "Category S" },
new Category() { sequence = 2, categoryName = "Category Z" },
new Category() { sequence = 4, categoryName = "Category X" },
new Category() { sequence = 5, categoryName = "Category V" }
};
我正在尝试用另一个替换给定的序列号,即用序列号 2 更新列表中的项目,编号为 5,如下所示:
int currSeq = 2;
int newSeq = 5;
var item = categories.Find(a => a.sequence == currSeq);
item.sequence = newSeq;
如果 newSeq 没有重复,例如newSeq = 6,我可以做 OrderBy:
categories = categories.OrderBy(c => c.sequence).ToList();
但问题是当它们重复时,我需要 newSeq 成为序列#5 并碰撞另一个重复的序列#5 + 1。
请提供解决此问题的任何指导。谢谢。
更新:某些情况下,当新序列
场景 A:
var categories = new List<Category>() {
new Category() { sequence = 3, categoryName = "Category F" },
new Category() { sequence = 1, categoryName = "Category S" },
new Category() { sequence = 2, categoryName = "Category Z" },
new Category() { sequence = 5, categoryName = "Category X" },
new Category() { sequence = 6, categoryName = "Category V" }
};
int currSeq = 2;
int newSeq = 1;
var result = categories.UpdateSequence(currSeq,newSeq).OrderBy(x=>x.sequence);
输出场景 A:
1: Category S
3: Category Z
4: Category F
5: Category X
6: Category V
所需的输出场景 A:
1: Category Z
2: Category S
3: Category F
5: Category X
6: Category V
场景 B:
int currSeq = 3;
int newSeq = 1;
var result = categories.UpdateSequence(currSeq,newSeq).OrderBy(x=>x.sequence);
输出场景 B:
1: Category Z
2: Category S
4: Category F
5: Category X
6: Category V
期望的输出场景 B:
1: Category F
2: Category S
3: Category Z
5: Category X
6: Category V
【问题讨论】:
-
好吧,再次使用 Linq。首先确定您的 categories 列表是否具有与 newSeq 具有相同 sequence 编号的 Category 对象。如果不存在这样的 Category 对象,则不需要递增。否则,Select 从您的类别中列出 sequence 数字等于或大于 newSeq 的 Category 对象,然后递增那些 Category 对象的sequence。完成...