7

どうすればandroid.util.SparseArrayをソートできますか? たとえば、次の SparseArray があります:
1 - 2.33
5 - 1.5
結果:
5 - 1.5
1 - 2.33

ありがとう!!!

-- 編集済み

マップを使用しました。手伝ってくれてありがとう。

4

6 に答える 6

7

キーまたは値のソート順を要求したかどうかは明確ではありません...

だからただのメモ:

二分検索はソートされたデータに対してのみ機能し、SparseArray はsourceに従ってソートされた (!) キー配列に対して二分検索を使用します。そのため、キーは既にソートされており、値からの順序のような別の順序は受け入れられません。

于 2012-11-14T20:44:08.180 に答える
3

@Karussellのスポットオンの回答に対する小さな修正の1つは、valueAt()メソッドのドキュメント自体も(キーで)ソートされた順序を示唆していることです。

[...]valueAt(0)は、最小のキーに関連付けられvalueAt(size()-1)た値を返し、最大のキーに関連付けられた値を返します。

方法についても同様の説明がなされているkeyAt()

于 2016-07-26T12:45:13.910 に答える
1

ツリーマップを使用できます。キーでソートされたエントリを保持します (キーは Comparable を実装する必要があります)。

于 2014-12-11T21:55:37.090 に答える
0

SparseArray.javaの基礎となるソース コードから判断すると、単にメソッドを呼び出すだけではそれを行うことはできません。a はすべて、 typeとSpareArraytype の 2 つの Java 言語配列です。これらの配列はプライベート インスタンス変数であり、リフレクションなしでは参照できません (名前が変わる可能性があるため危険です)。適切な解決策は、アプリケーションのコードをローカライズし、通常の Java 手法を使用してメソッドを追加することです (つまり、Array.sort ) 。intObjectSpareArraysort

于 2012-08-28T11:14:18.670 に答える
-1

更新しました:

private SparseIntArray void sortMap(SparseIntArray unsorted) {
    SparseIntArray sortedSparseIntArray = new SparseIntArray();
    while (unsorted.size() > 0) {
        int min = Integer.MAX_VALUE;
        int minIndex = 0;
        for (int i = 0; i < unsorted.size(); i++) {
            if (unsorted.keyAt(i) <= min) {
                min = unsorted.keyAt(i);
                minIndex = i;
            }
        }
        sortedSparseIntArray.put(min, unsorted.get(min));
        sFactorsMap.removeAt(minIndex);
    }
    return sortedSparseIntArray;
}
于 2017-11-16T13:42:19.340 に答える
-5

キー/値をリストに収集します。

                List<Integer>keys = Lists.newArrayList();
                List<Integer>vals = Lists.newArrayList();
    SparseArray<Integer>arr;
    for(int i =0; i < arr.size();i++){
    keys.add(arr.keyAt(i));
    values.add(arr.valueAt(i));
    }
    Collections.sort(keys);// sort
    Collections.sort(vals); 
    // then fill your array again.
    arr.clear();
    //...
    arr.put()
于 2012-08-28T11:18:32.497 に答える