【问题标题】:How to sort a list of lists of strings如何对字符串列表的列表进行排序
【发布时间】:2016-07-27 05:50:38
【问题描述】:

我有一个字符串列表

List<string> l1 = new List<string>();
l1.Add("i");
l1.Add("k");

List<string> l2 = new List<string>();
l2.Add("f");
l2.Add("a");

pChain = new List<List<string>>();
pChain.Add(l1);
pChain.Add(l2);
...

我想根据每个列表的第一项对pChain进行排序(结果应该是l2,l1)。

我尝试了pChain.Sort();,但出现异常

“System.InvalidOperationException”类型的未处理异常 发生在 mscorlib.dll 中

附加信息:无法比较数组中的两个元素。

【问题讨论】:

    标签: c# linq list sorting


    【解决方案1】:

    pChain.Sort()的默认调用无法预测您要按第一个元素排序,您需要明确指定:

    pChain.Sort((x, y) => String.Compare(x.FirstOrDefault(), y.FirstOrDefault()));
    

    或者,您可以使用 Linq 的 OrderBy(根据 documentation,这是一个 稳定 排序):

    pChain = pChain.OrderBy( x => x.FirstOrDefault()).ToList();
    

    此方法执行稳定排序;也就是说,如果两个键 元素相等,元素的顺序被保留。在 相反,不稳定的排序不会保留元素的顺序 具有相同的密钥。

    【讨论】:

    • 谢谢你帮了我很多
    【解决方案2】:

    您收到该错误是因为 C# 不知道如何为您排序 pChain 的项目,因为它是它自己的 IEnumerable

    您想按Max 项目对其进行排序吗?或通过Count 的项目?.. 或许多其他

    你应该提供一些规则来比较它,比如IComparable&lt;List&lt;string&gt;&gt; 或者:

    pChain = pChain.OrderBy(item => item.FirstOrDefault());
    

    【讨论】:

    • 谢谢,在问题中我要求根据每个字符串列表的第一项进行排序。
    猜你喜欢
    • 2010-09-07
    • 1970-01-01
    • 2015-03-26
    • 1970-01-01
    • 2011-03-26
    • 2021-06-10
    • 1970-01-01
    相关资源
    最近更新 更多