C#List <t> OrderBy浮动成员</t>

时间:2014-06-12 14:42:12

标签: c# linq list sorting

我有一个包含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,则此方法非常有效。任何线索?

5 个答案:

答案 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