0

私は学習のために小さなゲームを作っています。

可変配列をソートしたいので、オンラインでいくつかの例を見ました。問題は、辞書の配列をソートする必要があることです。各ディクショナリには、プレーヤーの名前、終了までにかかった時間、使用した手の数が含まれています。

メジャー配列内の辞書をソートすることは可能ですか?

もしそうなら、私は説明をいただければ幸いです。

ありがとう

4

2 に答える 2

0

もちろんできますが、次のようなコンパレータ ブロックを提供する必要があります。

NSArray *sortedArray = [startArray sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
    NSString* aa = [a objectForKey:KEY_USERNAME];
    NSString* bb = [b objectForKey:KEY_USERNAME];
    return [bb compare:aa];
}];

これは、任意の 2 つの要素を比較するために使用される「KEY_USERNAME」キーを持つ辞書の配列である「startArray」から新しい (不変の) 配列を作成します。

于 2012-12-11T20:58:50.353 に答える
0

あなたの質問に対する素早い答えは、はい、辞書の配列を並べ替えることができるということです。すぐにその方法を説明します。しかし、その前に、私はこれをお勧めしません。上記の説明から私が理解したことに基づいて、各プレイヤーには名前、時間、カウンターの3つの特徴があります。このような場合、辞書の配列の必要性はわかりません。各配列に必要な 3 つの項目が含まれる配列の辞書があるか、プレーヤー用のオブジェクトを作成できます (より推奨) )そして、最も単純なオブジェクトの配列になり、オブジェクトを簡単に並べ替えることができます...

あなたの質問に答えるために、1 つの方法は、次のようなカスタムの並べ替え関数を要求するために呼び出すことができる場所のメソッドsortedArrayUsingFunctionを使用することです。NSArray

mySortedArray = [myArray sortedArrayUsingFunction:myCustomSort context:nil];

これで、必要に応じてオブジェクトをキャストする独自の並べ替え関数を作成できます。次に例を示します。

NSInteger myCustomSort(id val1, id val2, void *context)
{
    NSDictionarry *dic1 = (NSDictionarry *) val1;
    NSDictionarry *dic2 = (NSDictionarry *) val2;
    //now you have 2 dictionaries from the array, jut do the comparison you want and return any of NSOrderedAscending, NSOrderedDescending, or NSOrderedSame
}
于 2012-12-11T21:06:58.143 に答える