我需要在 C# 中对float
. 我使用委托并对Array.Sort
它们进行排序,但似乎我不能使用float
.
转换为时如何保持这些浮点数的精度int
?
是否可以使用Array.Sort
withfloat
而不是int
return?
不使用 LINQ。
Array.Sort<T>(T[] array, Comparison<T> comparison)
不限于任何类型,只要您提供正确的比较委托。比较委托应该返回包含比较操作结果的整数值,而不是要与某物进行比较的值。例如,如果你有一个X
带有float
property的类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);
我猜您正在使用一些较旧的 .Net 版本,因为在您的一条评论中您曾询问您不想使用 LINQ。
在这种情况下是的,可以使用Array.Sort
float[] myfloatarray = new float[5];
Array.Sort(myfloatarray);
这将使用
Array.Sort<T>(T[] array);
这不使用任何仅限 LINQ 的泛型,并且在 .Net 2.0 中可用。
也许您将T
允许为任何东西的“in”类型与Comparison<T>
必须为的委托的返回类型混淆了int
?
这工作正常:
float[] arr = { 2.3f, 1.1f, 9.0f, 6.6f, };
Array.Sort(arr, (x, y) => SomeMethodReturningInt(x, y));
在这种情况下,第二个参数 toSort
是 a 。Comparison<float>
在 lambda 中,x
并且y
是float
s。