在C#中对嵌套字符串列表进行排序

For*_*ing 5 c# sorting

我想要实现的是按字母顺序排序的嵌套列表.

我的输入:

fat, twat, gat    //Line 1
cat, hat, bat     // Line 2
twat, lack, rat   // Line 3
Run Code Online (Sandbox Code Playgroud)

我希望输出为:

bat, cat, hat    // Line 2
fat, gat, twat   // Line 1
lack, rat, twat  // Line 3
Run Code Online (Sandbox Code Playgroud)

如您所见,列表首先在内部排序,然后在外部排序.

我目前的实现是使用嵌套列表:

List<List<String>> testSort;
Run Code Online (Sandbox Code Playgroud)

我已设法使用此方法对内部列表进行排序:

    public static List<List<String>> sortList(List<List<String>> input)
    {
        input.ForEach(delegate (List<string> o)
        {
            o.Sort();
        });

        return input;
    }
Run Code Online (Sandbox Code Playgroud)

我不确定如何在外面对列表进行排序.帮助将不胜感激!

提前致谢!

Phu*_*yen 9

在每个内部列表已经排序后,您可以使用OrderBy()根据每个列表的第一个元素对外部列表进行排序:

input.ForEach(t => t.Sort());
input = input.OrderBy(t => t.First()).ToList();
Run Code Online (Sandbox Code Playgroud)

为了回应下面的M.kazem Akhgary评论,如果你想要不仅基于第一个元素而是整个列表对外部列表进行排序,我只能想到这个解决方案.也许别人有更好的解决方案.

input.ForEach(t => t.Sort());
input.Sort((e1, e2) => {
    for (int i = 0; i < e1.Count; i++)
    {
        if(e1[i] != e2[i])
        {
            return e1[i].CompareTo(e2[i]);
        }
    }

    return 0;
});
Run Code Online (Sandbox Code Playgroud)

  • 如果第一个元素相等,那么第二个元素呢? (2认同)