如何对List< List< string>>进行排序?根据田地数量?
列表的结构类似于
a|b|c|d|eeee|rere|ewew|
ewqewq|ewew|
ewew|ewewewewew|
按排序我想根据块数(asc / desc)
来做修改
<list<list<string>> is "items"
我按照每个
这些项目[xx]是一个列表,这意味着我希望他们将数组排序为
a|b|c|d|eeee|rere|ewew|
a|b|c|d|eeee|rere
a|b|c|d|eeee
答案 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));