c# - 在 C# 中序列更新后重新排列通用列表
问题描述
假设我有一个通用列表,例如:
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。
请帮助解决此问题的任何指导。谢谢。
更新:某些情况下,当新序列 < 旧序列时,输出不符合预期。
情景一:
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
解决方案
做 elgonzo 在他的评论中所说的。另外,从间隔较宽的序列号开始,即 1000、2000、3000 而不是 1、2、3。我不知道您的用例,但除非您重新排序很多,否则这将最大限度地减少您必须做的序列号的“颠簸”数量。
推荐阅读
- php - 如何获取json格式的数据
- c# - 如何通过按下 WPF 中的按钮在项目目录中打开(HTML,ASP.net)页面
- android - 系统权限 MODIFY_PHONE_STATE
- jquery - 我的代码中的右括号问题
- ms-access - 使用 VBA 克服 Worksite 对话框
- javascript - 使用 Vue 和 Laravel 设置 Themeforest HTML 模板。在 router.push 上加载 JS 文件不起作用
- java - 为什么代码要求捕获 IOException
- javascript - 将表单数据和操作发送到 wordpress admin-ajax.php
- python - 不支持在 include() 中指定命名空间而不提供 app_name
- regex - 正则表达式在 Google 表格中捕获模式之前的所有内容