首先按字母顺序排序字符串列表,然后按数字排序

use*_*820 -2 c# linq sorting

所以我有一个具有类型字符串属性的对象列表.我希望对象按该属性排序.问题如下:List看起来像这样

12 Apple 
43 Banana
22 Apple 
90 Banana
13 Banana
67 Apple
Run Code Online (Sandbox Code Playgroud)

我希望列表的排序如下:

12 Apple
22 Apple
67 Apple
13 Banana
43 Banana
90 Banana
Run Code Online (Sandbox Code Playgroud)

我正在尝试一下,我试图像这样完成它:

myList.Sort(x, y) => x.Value.Contains("Banana").CompareTo(x.Value.Contains("Banana");
Run Code Online (Sandbox Code Playgroud)

当然,这不起作用.任何人都知道如何做到这一点

Tim*_*ter 6

您可以使用LINQ:

var orderedFruits = fruitList.OrderBy(f => f.Value).ThenBy(f => f.FruitId);
Run Code Online (Sandbox Code Playgroud)

如果您希望它再次成为列表:

fruitList = orderedFruits.ToList();
Run Code Online (Sandbox Code Playgroud)

好吧,如果字符串属性实际上包含数字和水果名称,那么它会更复杂,最好通过将两个信息存储在单独的属性中来修复您的类.

然而:

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);
Run Code Online (Sandbox Code Playgroud)

  • 令人困惑...因为这是正确的,但正如OP所说*具有类型字符串属性的对象列表.我希望对象按该属性排序.*所以解释是`12 Apple`是一个完整的字符串 (2认同)