gpt4 book ai didi

c# - 对具有多个小数点的数字字符串列表进行排序

转载 作者:行者123 更新时间:2023-11-30 14:46:32 25 4
gpt4 key购买 nike

我遇到这样一种情况,我需要按从左到右的降序对包含三个小数部分的字符串列表进行排序。真正的代码是<string, object>的字典,但我在这里简化了它,因为无论哪种方式我都处于同样的困境。

直接上代码:

using System;
using System.Collections.Generic;

class Program
{
static void Main()
{
List<string> perlVersions = new List<string>();

perlVersions.Add("5.26.1_32");
perlVersions.Add("5.24.1_32");
perlVersions.Add("5.8.1_64");
perlVersions.Add("5.24.2_64");

perlVersions.Sort();
perlVersions.Reverse();
foreach (string str in perlVersions) Console.WriteLine(str);
}
}

输出:

5.8.1_64
5.26.1_32
5.24.2_64
5.24.1_32

现在,一切正常,除了 5.8.1_64 , 由于数字的第二部分低于所有其他部分,因此应该在底部。

是否有我遗漏的特殊排序技巧,或者是否有进一步分解字符串并对每个单独元素进行排序的方法?

最佳答案

例如,您可以拆分 string 并将不同部分视为整数,然后使用一些 LINQ 按这些部分排序:

static void Main()
{
List<string> perlVersions = new List<string>();

perlVersions.Add("5.26.1_32");
perlVersions.Add("5.24.1_32");
perlVersions.Add("5.8.1_64");
perlVersions.Add("5.24.2_64");

perlVersions = perlVersions
.Select(x => x.Split(new char[] { '.' }))
.Select(x =>
{
string[] lastParts = x[2].Split(new char[] { '_' });
return new { a = Convert.ToInt32(x[0]), b = Convert.ToInt32(x[1]), c = Convert.ToInt32(lastParts[0]), d = Convert.ToInt32(lastParts[1]) };
})
.OrderBy(x => x.a).ThenBy(x => x.b).ThenBy(x => x.c).ThenBy(x => x.d)
.Select(x => string.Format("{0}.{1}.{2}_{3}", x.a, x.b, x.c, x.d))
.ToList();

perlVersions.Reverse();
foreach (string str in perlVersions) Console.WriteLine(str);
}

关于c# - 对具有多个小数点的数字字符串列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48830102/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com