gpt4 book ai didi

c# - List<> 按对象属性排序

转载 作者:太空宇宙 更新时间:2023-11-03 21:26:15 24 4
gpt4 key购买 nike

我需要根据对象的属性之一对对象列表进行排序,但它是一个字符串,需要像整数一样进行排序。这些对象是自定义“属性”对象,其中属性名称 (property.Name) 是一个字符串,但是 90% 的属性名称实际上是数字,而另外 10% 是名称/字母(因此变量本身必须是字符串而不是整数)。

我知道我可以用

propertyList.OrderBy(x => x.Name)

...但这会将它排序为字符串(即 15000“大于”20)。

出于排序目的,我已经将列表分成两个单独的列表(一个包含所有属性名称包含字母的列表,另一个包含可以转换为整数的列表),但我没有知道如何对“整数”列表进行排序。

我已经试过了,但它不起作用,但有没有类似的东西我可以使用?

propertyList.OrderBy(x => Convert.ToInt32(x.Name))

最佳答案

您不需要将数据分成两个列表;另请注意,您可以在 lambda 方法中执行复杂的操作,您只需要使用不同的语法:

IEnumerable<TItem> sorted = propertyList.OrderBy( x => {
Int32 asInt;
if( Int32.TryParse( x.Name, NumberStyles.Integer, CultureInfo.InvariantCulture, out asInt ) ) {
return asInt;
}
if( x.Name.Length > 0 ) return (Int32)x.Name[0];
return 0;
});

请注意,此代码有点丑陋且不完善,因为如果两个文本名称以相同的字符开头,它将无法正确排序。我建议改用更高级的 OrderBy 重载:

class NameComparer : IComparer<String> {
public Int32 Compare(String x, String y) {
// put Name comparison logic here
}
}

IEnumerable<TItem> sorted = propertyList.OrderBy( x => x.Name, new NameComparer() );

关于c# - List<> 按对象属性排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26825473/

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