2

にあるいくつかのオブジェクトの距離を並べ替えるには、C# が必要ですfloat。私はそれらをソートするためにデリゲートとを使用Array.Sortしていますが、使用できないようfloatです。

に変換するときにこれらの float の精度を維持するにはどうすればよいintですか?

in returnの代わりにArray.Sortwithを使用することは可能ですか?floatint

LINQを使用せずに。

4

6 に答える 6

8

Array.Sort<T>(T[] array, Comparison<T> comparison)正しい比較デリゲートを提供する限り、どのタイプにも制限されません。比較デリゲートは、何かと比較される値ではなく、比較操作の結果を含む整数値を返す必要があります。たとえば、プロパティを持つクラスXがある場合は、次のように並べ替えることができます。floatProperty

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));
}
于 2012-08-17T12:33:57.820 に答える
6

LINQ OrderBy 拡張メソッドを使用できます

var arr = new[] { 1.3f, 1.4f };
arr.OrderBy( a => a ).ToArray();
于 2012-08-17T12:16:04.397 に答える
2

最善の方法は、radixsort を使用することです。詳細については、次を参照してください。

C#の浮動小数点数の適切な基数ソート実装はありますか

幸運を

于 2012-08-17T12:19:27.563 に答える
2

LINQを使用できますか?

arrayOfFloats = arrayOfFloats.OrderBy(x => x);
于 2012-08-17T12:16:08.507 に答える
1

コメントの 1 つで、LINQ を使用したくないと尋ねたので、古い .Net バージョンを使用していると思います。

その場合はい利用可能ですArray.Sort

float[] myfloatarray = new float[5];

Array.Sort(myfloatarray);

これは使用します

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

これは、LINQ のみのジェネリックを使用せず、.Net 2.0 で使用できます。

ここでArray.Sortについて読んでください

于 2012-08-17T12:24:08.907 に答える
1

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>です。ラムダでxyfloats です。

于 2012-08-17T12:37:56.603 に答える