按字典顺序排序的字符串列表的列表

4

目前,我正在尝试实现一个生成频繁序列的代码。为此,我需要获取字符串列表的嵌套列表的就地排序结果,如下:

List<List<string>> myList = new List<List<string>>();
List<string> input1 = new List<string>() {"a", "b", "d"};
List<string> input2 = new List<string>() {"a", "b", "c"};
myList.Add(input1);
myList.Add(input2);

我需要的输出是:
myList = {{"a","b","c"},{"a","b","d"}};

我尝试使用myList.Sort(),但它引发了System.InvalidOperationException。 由于我不太熟悉LINQ,所以我没有使用任何类似的东西。


堆栈跟踪和异常发生的行可能会很有帮助。 - Uwe Keim
4个回答

2
如果你想要使用 Sort() 解决问题,可以尝试以下方法。
myList.Sort((x, y) => x.Zip(y,(l1,l2) => string.Compare(l1,l2)).FirstOrDefault(c => c != 0));

否则,我将把所有项连接成一个单独的 string 并进行比较。
这种方法效率较低,因为需要先创建字符串对象。
 myList = myList.OrderBy(string.Concat).ToList();

Sample: https://dotnetfiddle.net/1VmohI


2
如何:
myList = myList.OrderBy(s => string.Join(string.Empty, s)).ToList();

技巧在于按照子列表中每个元素连接而成的字符串进行排序。

0

你也可以使用

myList = myList.OrderBy(arr => arr[0])
                .ThenBy(arr => arr[1])
                .ThenBy(arr => arr[2])
                .ToList();

0
你可以尝试下面的代码:
        List<string> input1 = new List<string>() { "a", "b", "d" };
        List<string> input2 = new List<string>() { "a", "b", "c" };

        //Instead of adding input as List<string>, add it as string
        string delimiter = ",";
        var input1Str = input1.Aggregate((i, j) => i + delimiter + j);
        var input2Str = input2.Aggregate((i, j) => i + delimiter + j);

        var myListStr = new List<string>();
        myListStr.Add(input1Str);
        myListStr.Add(input2Str);

        myListStr.Sort();
        //Now you can convert it into List<List<string>>
        List<List<string>> myList = myListStr.Select(x => x.Split(',').ToList()).ToList();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接