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公里

非常感谢您的帮助。

c#列出包含数字的字符串orderby

您可以创建一个自然排序相等比较器。

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