にあるいくつかのオブジェクトの距離を並べ替えるには、C# が必要ですfloat
。私はそれらをソートするためにデリゲートとを使用Array.Sort
していますが、使用できないようfloat
です。
に変換するときにこれらの float の精度を維持するにはどうすればよいint
ですか?
in returnの代わりにArray.Sort
withを使用することは可能ですか?float
int
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);
コメントの 1 つで、LINQ を使用したくないと尋ねたので、古い .Net バージョンを使用していると思います。
その場合はい利用可能です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));
この場合、の 2 番目のパラメータSort
は aComparison<float>
です。ラムダでx
はy
、float
s です。