![](/img/trans.png)
[英]A List of Lists containing int and string, need to output X strings with highest int values based on TrackBar (not a sorted list)
[英]Lexicographically sorted list of lists of strings
目前,我正在尝试实现一个代码来生成频繁的序列。 在这样做时,我需要获得一个就地排序的字符串列表,如下所示:
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不是那么好,所以我没有使用任何类似的东西。
怎么样 :
myList = myList.OrderBy(s => string.Join(string.Empty, s)).ToList();
诀窍是根据子列表的每个元素的串联所做的字符串进行排序。
如果你想用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();
你可以尝试下面的代码:
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();
你也可以使用
myList = myList.OrderBy(arr => arr[0])
.ThenBy(arr => arr[1])
.ThenBy(arr => arr[2])
.ToList();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.