我有一个包含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应位于列表底部。 如果Value为int,则此方法非常有效。任何线索?
答案 0 :(得分:3)
不创建新列表:
Collection.Sort((x,y) => x.Value.CompareTo(y.Value));
答案 1 :(得分:1)
尝试
List<A> Collection = new List<A>( ... );
List<A> lstOrderedA = Collection.OrderBy(item => item.Value).ToList();
此处lstOrderedA
将包含您要查找的有序列表。
答案 2 :(得分:0)
试试这个:
List<A> ResultList = Collection.OrderBy(item => item.Value).ToList();
你也可以使用Linq查询语法:
IEnumerable<A> c = from x in Collection
orderby x.Value
select x;
答案 3 :(得分:0)
我使用此代码:
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。
答案 4 :(得分:0)
这证明它确实有效: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