如何排序List <list <string>&gt;根据List <string>字段数?</string> </list <string>

时间:2009-04-06 14:01:28

标签: c# list sorting

如何对List&lt; List&lt; string&gt;&gt;进行排序?根据田地数量?

列表的结构类似于

a|b|c|d|eeee|rere|ewew|
ewqewq|ewew|
ewew|ewewewewew|

按排序我想根据块数(asc / desc)

来做

修改

<list<list<string>> is "items"我按照每个

的项目[0]访问每个列表

这些项目[xx]是一个列表,这意味着我希望他们将数组排序为

    a|b|c|d|eeee|rere|ewew|
    a|b|c|d|eeee|rere
    a|b|c|d|eeee

5 个答案:

答案 0 :(得分:9)

如果您不需要“就地”排序,可以使用LINQ为您提供一个新的排序列表。

var sorted = oldList.OrderBy( l => l.Count );

否则,您需要编写自己的Comparer,它接受两个列表并按其大小返回排序。

public class CountComparer : IComparer<List<string>>
{
    #region IComparer<List<string>> Members

    public int Compare( List<string> x, List<string> y )
    {
        return x.Count.CompareTo( y.Count );
    }

    #endregion
}



oldList.Sort( new CountComparer() );

或者,正如@Josh指出的那样,你可以用lambda表达式来做到这一点。

oldList.Sort( (a,b) => a.Count.CompareTo( b.Count ) )

IMO如果比较相对简单或使用一次,后者效果很好,但实际的类可能更好,因为比较变得更复杂,或者你需要在多个地方重复它。

答案 1 :(得分:3)

List<List<string>> list; // filled elsewhere
list.Sort((x,y) => x.Count.CompareTo(y.Count););

答案 2 :(得分:1)

List<List<string>> strings = new List<List<string>>();

// add your strings

strings = new List<List<string>>(from str in strings orderby str.Count select str);

显然你可以根据你的场景进行调整,但是这应该让你大致了解如何创建一个列表,该列表按照另一个列表中特定字符串中的元素数排序。

答案 3 :(得分:1)

您可以使用排序方法进行排序,方法是创建自己的Compararer或为其指定Comparison<T>类型的委托。

ls.Sort((x, y) => x.Count.CompareTo(y.Count));

这是一个显示如何使用lambda表达式进行比较的示例。

修改

反转排序的一种非常简单的方法是乘以负-1

ls.Sort((x, y) => -1 * x.Count.CompareTo(y.Count));

答案 4 :(得分:0)

只是一个小调整,同时检查

        List<List<string>> listOfLists = new List<List<string>>();

        List<string> list1 = new List<string>();
        list1.Add("elem 1 1");
        list1.Add("elem 1 2");
        list1.Add("elem 1 3");

        List<string> list2 = new List<string>();
        list2.Add("elem 2 1");
        list2.Add("elem 2 2");
        list2.Add("elem 2 3");
        list2.Add("elem 2 4");

        listOfLists.Add(list1);
        listOfLists.Add(null); // list can contain nulls
        listOfLists.Add(list2);
        listOfLists.Add(null); // list can contain nulls

当列表列表中有空列表时,您可能希望通过将null.Count解释为-1或NOT

来使它们的优先级低于空列表。
        int nullListElems = -1; 
        //int nullListElems = 0; 

        listOfLists.Sort((l1,l2)=> 
            l1 == null ? 
            nullListElems : 
            l1.Count.CompareTo(
                l2 == null ? 
                nullListElems : 
                l2.Count));