【问题标题】:Merging a List<string> into another one alphabetically [closed]按字母顺序将 List<string> 合并到另一个 [关闭]
【发布时间】:2021-02-23 21:24:09
【问题描述】:

假设我有一个(不是很好排序的)主列表:

List<string> list1 = new List<string> { "AB2", "AB1", "AB3", "BB3", "BB2", "BB1" };

我想按字母顺序添加另一个列表。例如,如果我有

List<string> list2 = new List<string> { "AA1", "AA2", "BA1", "BA2" };

合并后的列表是

List<string> listMerged = new List<string> { "AA1", "AA2", "AB2", "AB1", "AB3", "BA1", "BA2", "BB3", "BB2", "BB1" };

因此,规则松散地说是:对于主列表的每个元素,循环第二个列表并插入之前按字母顺序找到的每个元素。

我怎样才能做到这一点?我不希望对第一个列表进行排序,我只想在其中插入第二个相应排序的列表。

【问题讨论】:

  • 如果第一个列表未排序,并且您希望它保持未排序,那么认为您可以将另一个排序列表合并到其中是没有意义的。或者至少,第二个列表的“排序”方面是完全不相关的。请修正您的问题,使其包含minimal reproducible example,并详细说明该代码的作用、与您想要的有何不同以及具体您需要什么帮助。正如现在所说,你的问题没有意义。
  • @Dmitry:来自帖子:“我不希望对第一个列表进行排序”。 cmets 无论如何都不是用来回答问题的,但是您在评论中提出的答案显然违反了规定的要求。对两个列表的串联进行排序实际上与对第一个列表进行排序相同。

标签: c# list alphabetical


【解决方案1】:

此代码将为您提供所需的输出。

对于第二个列表中的每个项目,它会将其与第一个列表中的一个项目进行比较,并在第一个列表中前后移动。如果比较是肯定的,所以 B > A,它将继续迭代。否则,它将停止并插入到与之比较的项目之前的第一个列表中。

var list1 = new List<string> { "AB2", "AB1", "AB3", "BB3", "BB2", "BB1" };
var list2 = new List<string> { "AA1", "AA2", "BA1", "BA2" };

foreach (var item in list2)
{
    var index = 0;
    while (index < list1.Count && item.CompareTo(list1[index]) > 0)
    {
        index++;
    }
    list1.Insert(index, item);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-26
    • 2021-07-15
    • 2010-09-16
    • 2015-09-06
    • 1970-01-01
    • 1970-01-01
    • 2018-09-15
    相关资源
    最近更新 更多