所以我有一个具有类型字符串属性的对象列表。我希望对象按该属性排序。问题如下: 列表看起来像这样的
12 Apple
43 Banana
22 Apple
90 Banana
13 Banana
67 Apple
我希望列表的排序方式如下:
12 Apple
22 Apple
67 Apple
13 Banana
43 Banana
90 Banana
我正在尝试一下,我试图像这样完成它:
myList.Sort(x, y) => x.Value.Contains("Banana").CompareTo(x.Value.Contains("Banana");
但是这不起作用。 任何人都知道如何完成
答案 0 :(得分:6)
您可以使用LINQ:
var orderedFruits = fruitList.OrderBy(f => f.Value).ThenBy(f => f.FruitId);
如果您希望它再次成为列表:
fruitList = orderedFruits.ToList();
好吧,如果字符串属性实际上包含数字和水果名称,那么它会更复杂,最好通过将两个信息存储在不同的属性中来修复您的类。
然而:
var orderedFruits = fruitList
.Select(f => new { arr = f.Value.Split(), OriginalFruit = f })
.Where(x => x.arr[0].Trim().All(char.IsDigit))
.Select(x => new { ID = int.Parse(x.arr[0].Trim()), Fruit = x.arr.Last().Trim(), x.OriginalFruit })
.OrderBy(x => x.Fruit)
.ThenBy(x => x.ID)
.Select(x => x.OriginalFruit);
答案 1 :(得分:1)
试试这个,
var orderfruitlist = fruitslist.OrderBy(x => x.Fruit.Split(' ')[1]).ThenBy(x => x.Fruit.Split(' ')[0]);
答案 2 :(得分:0)
现在,假设(a)" 12 Apple"是一个字符串,并且(b)问题的标题是错误的,你实际上想要首先对单词进行排序,然后按数字排序,这不会那么难 - 假设所有数字都是2位数:
var sorted = from f in fruitlist
orderby f.Substring(3), f
select f;
现在,如果数字可以多于或少于2位数,那么我们必须更多地参与其中: (已更新以进行正确的数字排序)
var sorted = from f in fruitlist
let parts = f.Split(' ')
orderby parts[1], Int32.Parse(parts[0])
select f;