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



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

转换为

int时如何保持这些浮点数的精度?

是否可以将Array.Sortfloat一起使用,而不是int作为回报?

不使用 LINQ。

只要

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

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);

最好的变体是使用基数排序,更多信息见

C# 中浮点数是否有良好的基数排序实现

祝你好运

我猜你正在使用一些较旧的 .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与必须intComparison<T>委托的返回类型混淆了?

这工作正常:

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

在本例中,要Sort的第二个参数是Comparison<float>。在 lambda 中,xyfloat s。

最新更新