C# List<T> OrderBy float member
本文关键字:OrderBy float member gt lt List | 更新日期: 2023-09-27 18:08:33
我有一个包含类a实例的列表。
class A
{
public int Id;
public float Value;
}
List<A> Collection = new List<A>( ... );
我想用
对列表排序Collection.OrderBy(item => item.Value);
这应该是工作的,但对于浮点数,它扰乱了排序。它会生成
1.0, 1.5, 1.6, 10.5, 11.54, 3.4, 4, 6.6, 7
其中10.5,11.54应在列表底部。这种方法对于if Value是int非常有效。有线索吗?
不创建新列表:
Collection.Sort((x,y) => x.Value.CompareTo(y.Value));
Try
List<A> Collection = new List<A>( ... );
List<A> lstOrderedA = Collection.OrderBy(item => item.Value).ToList();
这里lstOrderedA
将有您正在寻找的有序列表。
我使用以下代码:
List<A> Collection = new List<A>()
{
new A(){Id=1,Value=1.0f},new A(){Id=1,Value=11.5f},new A(){Id=1,Value=1.6f},new A(){Id=1,Value=10.5f}
};
List<A> orderedList = Collection.OrderBy(i =>i.Value).ToList();
和它显示1.0, 1.6, 10.5, 11.5 .
这证明它是有效的:https://dotnetfiddle.net/3ryECS
Linq不改变原来的列表,它返回一个新的排序的IEnumerable<A>
因此调用.OrderBy(a => a.Value)
后,collection
的值保持不变。
正如另一个答案所解释的,如果你想改变原始列表,你应该使用Sort
using System;
using System.Linq;
using System.Collections.Generic;
public class Program
{
class A
{
public int Id;
public float Value;
}
public static void Main()
{
var collection = new List<A>{
new A { Id = 1, Value = 1.0f },
new A { Id = 5, Value = 5.0f },
new A { Id = 6, Value = 6.0f },
new A { Id = 10, Value = 10.0f },
new A { Id = 11, Value = 11.0f },
new A { Id = -289, Value = -289.0f },
new A { Id = 123, Value = 123.0f },
new A { Id = 3, Value = 3.0f }
};
foreach (var a in collection.OrderBy(v => v.Value))
{
Console.WriteLine(a.Value);
}
}
}
输出:-289
1
3
5
6
10
11
123
try this:
List<A> ResultList = Collection.OrderBy(item => item.Value).ToList();
你也可以使用Linq查询语法:
IEnumerable<A> c = from x in Collection
orderby x.Value
select x;