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非常有效。有线索吗?

C# List<T> OrderBy float member

不创建新列表:

 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;