C#按字符串排序字符串列表

时间:2016-01-25 10:18:25

标签: c# list

我有一个清单:

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

它可能包含以下值:

  

-3,003 - 间

     

2086

     

-1,006-mx

     

我用它对它进行了分类:

allValues = allValues.OrderBy(q => q).ToList<string>();
allValues.Reverse();

问题是,它在某种程度上在正常值和负值之间没有区别(我希望即使它们是字符串也能工作)。

所以而不是:

  

3,001 | 3,003米| 2,086 | 2,145米| 1,004 | 0,033 | -1,008-m | -2,490

它看起来像这样:

  

3,001 | 3,003米| 2,086 | -2,490 | 2,145米| -1,008-m | 1,004 | 0033

如果现在为负或正,它似乎将它们视为相同,导致一个有点随机排序的List。

我知道可能有更好的方法,但我想知道是否有可能在这种特定情况下解决这个问题。

2 个答案:

答案 0 :(得分:2)

由于allValues是一个字符串列表,因此排序字符串的规则也适用于排序。由于您需要排序的数字规则,您必须在排序之前将元素转换为数字,例如致电Convert.ToInt32)。

所以你的订购如下:

var result = allValues.OrderBy(q => 
    Convert.ToInt32(q.SubString(0, q.IndexOf(","))))
    .ToList<string>();

仅在提取数字部分及其顺序时执行,但它会保留实际的字符串。

答案 1 :(得分:1)

这应该做的工作:

var result = (from s in allValues
             let val = s.Split(new string[] { "-m" }, StringSplitOptions.RemoveEmptyEntries)[0]
             let val2 = double.Parse(val)
             orderby val2
             select s).Reverse();

我们的想法是将第一个元素除以"-m",您可以根据需要简单地将拆分选项添加到其他内容("-mx", "-p"等)。