gpt4 book ai didi

c# - 如何使用 LINQ 对后跟数字的文本字符串进行排序

转载 作者:太空狗 更新时间:2023-10-29 18:02:24 26 4
gpt4 key购买 nike

我一直在使用以下排序:

var query = _cityRepository.GetAll(
.OrderBy(item => item.RowKey.Substring(0, 4))
.ThenBy(item => item.ShortTitle)

但是我遇到了问题,因为我的 ShortTitle 看起来像这样:

Liverpool - 1
Liverpool - 2
...
Liverpool - 9
Liverpool - 10
Liverpool - 11
West Kirby - 1
West Kirby - 8
West Kirby - 12

当我使用 LINQ 对其进行排序时,它按顺序出现

Liverpool - 1
Liverpool - 11
Liverpool - 12
Liverpool - 2
West Kirby - 1
West Kirby - 12
West Kirby - 8

ShortTitle 始终是一串单词,后跟一个连字符,然后是一个数字。

有没有办法让它正确排序?

最佳答案

试试这个

List<string> list = new List<string>() { 
"Liverpool - 1",
"Liverpool - 11",
"Liverpool - 12",
"Liverpool - 2",
"West Kirby - 1",
"West Kirby - 12",
"West Kirby - 8" };
var sortedList = list.CustomSort().ToArray();


public static class MyExtensions
{
public static IEnumerable<string> CustomSort(this IEnumerable<string> list)
{
int maxLen = list.Select(s => s.Length).Max();

return list.Select(s => new
{
OrgStr = s,
SortStr = Regex.Replace(s, @"(\d+)|(\D+)", m => m.Value.PadLeft(maxLen, char.IsDigit(m.Value[0]) ? ' ' : '\xffff'))
})
.OrderBy(x => x.SortStr)
.Select(x => x.OrgStr);
}

}

关于c# - 如何使用 LINQ 对后跟数字的文本字符串进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11052095/

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