gpt4 book ai didi

c# - 首先按字母值对列表排序,然后按数值排序

转载 作者:行者123 更新时间:2023-12-02 17:41:11 26 4
gpt4 key购买 nike

class ListSort
{
static void Main(string[] args)
{
string[] partNumbers = new string[]
{
"India", "US","UK", "Australia","Germany", "1", "7", "9"
};
var result = partNumbers.OrderBy(x => x).ToList();
}
}

我尝试了上面的代码,并期望得到以下输出:

Australia
Germany
India
UK
US
1
7
9

编辑:数字应该按数字排序(1、7、9、70,...),而非数字应该始终按词汇排序,即使里面有数字(“A3stralia”、“澳大利亚”、“德国”)。

最佳答案

试试这个:

string[] partNumbers = new string[] 
{
"India", "US","UK", "Australia","Germany", "1", "7", "9"
};

var result = partNumbers.OrderBy(x => char.IsNumber(x.FirstOrDefault())).ThenBy(x => x).ToList().Dump();

请注意,这仅在您的数据是数字或文本时才有效,如果存在诸如“U2S”之类的值,则无效。不过,如果您需要的话,我也可以将其更改为适用于那些情况。此外,数字字符串仍按字符串排序,因此“10”位于“2”之前。

当您将 A3stralia70 添加到列表时,您希望结果如何?

编辑:针对新约束进行了更改:

string[] partNumbers = new string[] 
{
"India", "US","UK", "Australia","Germany", "1", "7", "9", "70", "A3stralia"
};

var result =
partNumbers
.Select(x => { int p; bool isNumber = int.TryParse(x, out p); return new { IsNumber = isNumber, NumericValue = isNumber ? p : int.MinValue, StringValue = x }; })
.OrderBy(x => x.IsNumber)
.ThenBy(x => x.NumericValue)
.ThenBy(x => x.StringValue)
.Select(x => x.StringValue)
.ToList();

关于c# - 首先按字母值对列表排序,然后按数值排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20465822/

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