我有一个清单:
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。
我知道可能有更好的方法,但我想知道是否有可能在这种特定情况下解决这个问题。
答案 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"
等)。