どのように並べ替えることができますandroid.util.SparseArray? など。私はSparseArrayを持っている:
1から2.33
5から1.5
結果:
5から1.5
1から2.33AndroidでSparseArrayを並べ替え
感謝!
- 編集済み
私はマップを使用しました。手伝ってくれてありがとう。
どのように並べ替えることができますandroid.util.SparseArray? など。私はSparseArrayを持っている:
1から2.33
5から1.5
結果:
5から1.5
1から2.33AndroidでSparseArrayを並べ替え
感謝!
- 編集済み
私はマップを使用しました。手伝ってくれてありがとう。
SparseArray.javaのソースコードで判断すると、単にメソッドを呼び出すことでそれを行うことはできません。すべてのSpareArray
は、2つのJava言語の配列で、タイプはint
で、タイプはObject
です。これらの配列はプライベートなインスタンス変数なので、Reflectionなしではそれらを参照できません(名前が変わると危険です)。アプリケーションにSpareArray
コードをローカライズし、通常のJava技術(Array.sort)を使用してsort
メソッドを追加するとよいでしょう。
リストにキー/値を収集します。
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()
ご注文のソートキーまたは値を要求された場合には、これだけのノート...
明らかではない。
バイナリ検索のみソートされたデータ上で動作し、SparseArrayは、バイナリ検索を使用していますthe sourceに従ってソートされた(!)キー配列を返します。したがって、キーはすでにソートされており、値の順序とは異なる順序を受け入れません。
使用のLinkedHashMapあなたはマップが
アップデートソートする場合は:あなたはTreeMapのを使用することができます
を。エントリをキーでソートしたままにします(キーはComparableを実装する必要があります)。
私はこの答えが間違っていると主張します。 'LinkedHashMap'自体はソートされておらず、キーも値もありません。 [JavaSE 7 documentation](https://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashMap.html)に記載されている唯一の保証は、キーの反復順序を維持することです: "[ ...]通常はキーがマップに挿入された順序(挿入順序) "。データ(またはキー)のソートについては何も言わない。 – dbm
Shayan_Aryanが意味するのは、標準のTreeMapやConcurrentSkipListMapなどです(https://docs.oracle.com/javase/8/docs/api/java/util/AbstractMap.htmlを参照)。 – Karussell
@Karussellはい、ありがとうございます。私はそれを正確に意味しました。私は私の答えを更新しました。 –
キーでソートされた、私の解決策を確認してください:
private static SparseIntArray sFactorsMap = new SparseIntArray();
private static void sortMap() {
SparseIntArray sortedSparseIntArray = new SparseIntArray();
while (sFactorsMap.size() > 0) {
int min = Integer.MAX_VALUE;
for (int i = 0; i < sFactorsMap.size(); i++) {
if (sFactorsMap.keyAt(i) <= min) {
min = sFactorsMap.keyAt(i);
}
}
sortedSparseIntArray.put(min, sFactorsMap.get(min));
sFactorsMap.removeAt(sFactorsMap.indexOfKey(min));
}
sFactorsMap = sortedSparseIntArray;
}
をあなたはそれをソートしたいと思うのはなぜ?キーは変更されず、 'SparseArray'は' Iterable'を実装しません。 – nkr
'Iterable'はそれほど問題ではありませんが、このデータ構造をソートすることが目的ならば、' Map'のサブクラスのような一般的なJavaデータ構造が理にかなっています。 'SpareArray'を望みの方法でソートすることはできなかったとは言えませんが、すぐに使用できるソリューションを使用するよりも多くの作業があります。 – Tom
@Tom:はい、彼は別のデータ構造を使うべきです。彼が 'SparseArray'をソートしても、正しい順序で値を取得することはできません。 – nkr