1

私はNSMutableDictionary2つのキーを持っています。1 つはタイトル (例: 「テスト」) 用で、もう 1 つは距離 (例: 「200」 マイル) 用です。

これらの値を最も近い距離または最も遠い距離で並べ替えるにはどうすればよいですか。注文時にタイトルと距離値インデックスの両方を変更する必要があります。

したがって、これはの通常のバージョンになりNSMutableDictionaryます:

Titles: (
    "Test1"
    "Test2"
    "Test3"
)

Distances: (
    "240"
    "43"
    "482"
)

そして、注文されたバージョン (最も近い距離):

Titles: (
    "Test2"
    "Test1"
    "Test3"
)

Distances: (
    "43"
    "240"
    "482"
)
4

3 に答える 3

3

あなたが求めているのは、NSDictionaries の NSArray か、カスタム オブジェクトの NSArray だと思わずにはいられません。この設計は非常にぎこちなく、余分な作業が発生します — データをこのように構造化する場合の唯一の本当の答えは、「この不変条件を非常に注意深く管理するカスタム API を作成し、そのインターフェイスを介してのみこのデータ構造を変更することです」 ."

于 2012-09-24T20:27:00.573 に答える
1

@Chuckが言うように、これら2つの配列をソートするか、ソートしたままにすることが重要な操作である場合、ペアの配列は明らかな構造です。ただし、これがまれな操作であり、2 配列の辞書として保持する十分な理由がある場合は、次のようにして目標を達成できます。

  1. 配列と同じ数nの要素を持つ新しい配列 (NSArray またはプレーン C 配列) を作成します。
  2. この配列に 0 ~ ( n - 1)の整数を入力します。
  3. Distances同じインデックスで配列内の値を検索し、それらを比較することに基づいて、2 つの値を並べ替える配列のカスタム ソート。
  4. 完了すると、2 つの配列に適用する順列であるインデックスの配列が得られます。
  5. 両方の配列を並べ替えます。

しかし、ペアの配列の方が簡単です...

于 2012-09-24T20:55:58.967 に答える
0

私はこのようにします:

NSDictionary *dic1 = [NSDictionary dictionaryWithObjectsAndKeys:@"TEST1", @"TITLE", [NSNumber numberWithInt:240], @"DISTANCE", nil];
NSDictionary *dic2 = [NSDictionary dictionaryWithObjectsAndKeys:@"TEST2", @"TITLE", [NSNumber numberWithInt:43], @"DISTANCE", nil];
NSDictionary *dic3 = [NSDictionary dictionaryWithObjectsAndKeys:@"TEST3", @"TITLE", [NSNumber numberWithInt:482], @"DISTANCE", nil];

NSSortDescriptor *distanceSort = [NSSortDescriptor sortDescriptorWithKey:@"DISTANCE" ascending:YES]; //Set 'NO' to order from biggest to lowest

NSArray *sortedArrayOfDic = [[NSArray arrayWithObjects:dic1, dic2, dic3, nil] sortedArrayUsingDescriptors:[NSArray arrayWithObjects:distanceSort, nil]];

NSLog(@"%@", sortedArrayOfDict);

出力は、次のような距離でソートされた辞書の配列になります。

"43", "TEST2"
"240", "TEST1"
"482", "TEST3"
于 2012-09-24T20:57:50.647 に答える