繁体   English   中英

使用Array.Sort()进行浮点排序

[英]Float sorting with Array.Sort()

我需要在C#中对某些float对象中的某些距离进行排序。 我使用delegate和Array.Sort对它们进行排序,但似乎我不能使用float

转换为int时,如何保持浮点数的精度?

是否可以使用带有float而不是int Array.Sort作为回报?

不使用LINQ。

只要您提供正确的比较委托Array.Sort<T>(T[] array, Comparison<T> comparison)不限于任何类型。 比较委托应该返回包含比较操作结果的整数值,而不是要与某些东西进行比较的值。 例如,如果您的类X具有float属性Property ,则可以按如下方式对它们进行排序:

public sealed class X
{
    public float Property { get; set; }
}

static void Test()
{
    var arr = new X[]
    {
        new X { Property = 5.5f },
        new X { Property = 2.5f },
        new X { Property = 6.5f },
        new X { Property = 1.2f },
    };
    Array.Sort(arr, (a, b) => a.Property.CompareTo(b.Property));
}

您可以使用LINQ OrderBy扩展方法

var arr = new[] { 1.3f, 1.4f };
arr.OrderBy( a => a ).ToArray();

您可以使用LINQ吗?

arrayOfFloats = arrayOfFloats.OrderBy(x => x);

最好的变体是使用radixsort,请参阅更多信息

C#中的浮点数是否有良好的radixsort实现?

祝好运

我猜你正在使用一些较旧的.Net版本,因为在你的一条评论中你曾要求你不想使用LINQ。

在那种情况下是的,可以使用Array.Sort

float[] myfloatarray = new float[5];

Array.Sort(myfloatarray);

这将使用

Array.Sort<T>(T[] array);

这不使用任何LINQ唯一的泛型,并且可以在.Net 2.0中使用。

在这里阅读Array.Sort

也许你混淆了允许成为任何东西的“in”类型T ,而Comparison<T>委托的返回类型必须是int

这很好用:

float[] arr = { 2.3f, 1.1f, 9.0f, 6.6f, };
Array.Sort(arr, (x, y) => SomeMethodReturningInt(x, y));

Sort的第二个参数是这种情况下的Comparison<float> 在lambda中, xyfloat

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM