c#列出包含数字的字符串orderby
本文关键字:字符串 orderby 数字 包含 | 更新日期: 2023-09-27 18:29:59
我有一个距离字符串列表,如下所示:
1.3公里
20公里
44公里
22.5公里
26.7公里
目前,我正在按长度订购,然后"按字母顺序"订购:
实例列表。OrderBy(x=>x.Distance.Length)。ThenBy(x=>x.距离)
这将为我提供一个按如下顺序排列的列表:
20公里
44公里
1.3公里
22.5公里
26.7公里
这就是代码的作用,我理解它。现在我想要一个按实际距离对字符串进行排序的解决方案,但我不知道如何实现:
1.3公里
20公里
22.5公里
26.7公里
44公里
非常感谢您的帮助。
您可以创建一个自然排序相等比较器。
public class DistanceNaturalSort : IComparer<string>
{
int IComparer<string>.Compare(string x, string y)
{
try
{
var valX = double.Parse(Regex.Match(x, @"'d+('.'d+)?").Value);
var valY = double.Parse(Regex.Match(y, @"'d+('.'d+)?").Value);
if (valX == valY)
return 0;
else if (valX < valY)
return -1;
else
return 1;
}
catch (Exception)
{
return ((new CaseInsensitiveComparer()).Compare(y, x));
}
}
}
然后,您只需将比较器传递给第一个订单:
var comparer = new DistanceNaturalSort();
var sorted = listofdistances.OrderBy(x => x, comparer);
您也可以在Linq中使用
string[] h = new string[] { "1.3 km","20 km","44 km","22.5 km","26.7 km" };
h.Select(g => double.Parse(g.Trim().Split(' ')[0])).OrderBy(g => g).Select(x => x + " Km")>toList();
如果空间总是分裂的,单位总是相同的
var v = ls.Select(x => x.Split(' '));
var v2 = v.OrderBy(x=>Convert.ToDouble(x[0]));
var v3 = v2.Select(z=>z.Aggregate((x, y) => x.ToString() + " " + y));
请参考以下内容,我想就是你要找的那个。
Alphanum Algorithm
&
Java Comparator Implementation
。