首页 > 解决方案 > 给定所需的排序层次结构,如何自定义对字符串列表进行排序?

问题描述

我想以List<string>特定方式对 a 进行排序。下面是一个单元测试,显示了输入具体方式(我称之为“层次结构”——请随时更正我的术语以便我学习)和所需的输出。代码应该是不言自明的。

[Test]
public void CustomSortByHierarchy()
{
    List<string> input = new List<string>{"TJ", "DJ", "HR", "HR", "TJ"};

    List<string> hierarchy = new List<string>{"HR", "TJ", "DJ" };

    List<string> sorted = input.Sort(hierarchy); // <-- does not compile. How do I sort by the hierarchy?

    // ...and if the sort worked as desired, these assert statements would return true:
    Assert.AreEqual("HR", sorted[0]);
    Assert.AreEqual("HR", sorted[1]);
    Assert.AreEqual("TJ", sorted[2]);
    Assert.AreEqual("TJ", sorted[3]);
    Assert.AreEqual("DJ", sorted[4]);
}

标签: c#

解决方案


另一种方法:

var hierarchy = new Dictionary<string, int>{
    { "HR",  1},
    { "TJ",  2},
    { "DJ",  3} };

var sorted = strings.OrderBy(s => hierarchy[s]).ToList();

推荐阅读