2016-04-08 19 views
0

こんにちは。これは、私は、これは出力出力キー "id"昇順に基づいてこのNSDictionaryをソートする方法は?

{ 
     1 =   { 

      "display_name" = "One"; 
      id = 1; 
    }; 
     2 =   { 

      "display_name" = "Two"; 
      id = 2; 
    }; 
     3 =   { 

      "display_name" = "abdfdfc"; 
      id = 3; 
    }; 
     4 =   { 

      "display_name" = "ffd"; 
      id = 4; 
    }; 
    5 =   { 

      "display_name" = "aasdfsdfa"; 
      id = 5; 
    }; 
     13 =   { 

      "display_name" = "abc"; 
      id = 13; 
    }; 
     15 =   { 

      "display_name" = "aaa"; 
      id = 15; 
    }; 
} 

このコードIを期待

ように見ているものです「ID」に基づいて、これをソートする必要があるサーバー

{ 
     1 =   { 

      "display_name" = "One"; 
      id = 1; 
    }; 
     2 =   { 

      "display_name" = "Two"; 
      id = 2; 
    }; 
     13 =   { 

      "display_name" = "abc"; 
      id = 13; 
    }; 
     15 =   { 

      "display_name" = "aaa"; 
      id = 15; 
    }; 
    4 =   { 

      "display_name" = "ffd"; 
      id = 4; 
    }; 
     3 =   { 

      "display_name" = "abdfdfc"; 
      id = 3; 
    }; 
     5 =   { 

      "display_name" = "aasdfsdfa"; 
      id = 5; 
    }; 
} 

から取得していますものです試して、それが動作していない

//vehiclesDictionary real dictionary 
     NSMutableArray *sortedKeys=[[NSMutableArray alloc]init]; 
     for(NSString *item in [vehiclesDictionary allKeys]){ 
      [sortedKeys addObject:[NSNumber numberWithInt:[item intValue]]]; 
     } 


     NSArray *sortedKeysArray = [sortedKeys sortedArrayUsingSelector: @selector(compare:)]; 
     NSLog(@"%@",sortedKeysArray); 

     NSMutableDictionary *sortedValues = [[NSMutableDictionary alloc] init]; 
     for (NSString *key in sortedKeysArray) { 
      [sortedValues setValue:[vehiclesDictionary valueForKey:[NSString stringWithFormat:@"%@",key]] forKey:key]; 
     } 

     NSLog(@"%@",sortedValues); 

Plsは私を助ける

+0

pls説明が機能しません。 –

+0

[NSDictionaryキーをそれぞれの値でソートする]の複製がある可能性があります(http://stackoverflow.com/questions/9708742/getting-nsdictionary-keys-sorted-by-their-respective-values) –

+3

基本的に辞書は順序付けられていませんコレクションタイプを定義してソートすることはできません。 – vadian

答えて

1

NSDictionaryをソートすることはできません。ソートされていないコレクションタイプです。配列にキーを格納し、これをソートしてNSDictionaryに順番にアクセスする必要があります。

上記のコードに基づいて、次のように変更できます。

NSDictionary *dict = [NSDictionary dictionary]; 

NSArray *sortedKeys = [[dict allKeys] sortedArrayUsingSelector:@selector(compare:)]; 

for (NSString *key in sortedKeys) { 
    NSLog(@"%@", [d objectForKey:key]); 

    // Do something with the object here 
} 

ここでは、NSDictionaryのとsortedKeys配列の周りに渡し、そしてあなたのNSDictionaryのへのインオーダーのアクセスのためのsortedKeys配列を使用することができます。

配列を取得するために、より簡潔なアプローチが、上記と同じ結果で、使用されるであろう:

NSDictionary -keysSortedByValueUsingComparatorhereに示すように。

+0

これは私が行ったことであり、あなたに注文データを与えません。 – Bangalore

+0

そのコードを編集することができます – Bangalore

+0

彼は辞書ではなく配列にキーを挿入するので、これはできません。ところで、私は配列の代わりに順序付きセットを選択します。 –

0

他にも言及したように、NSDictionariesはソートできません。これは、あなたの辞書からすべてのキーを取るあなたが望むよう昇順または降順に並べ替えるとNSArrayとしてそれを返します

-(NSArray *)sortedKeysFromDictionary:(NSDictionary *)dictionary ascending:(BOOL)ascending 
{ 
    /* get all keys from dictionary */ 
    NSArray *allKeys = [dictionary allKeys]; 

    NSString *key = @"id"; // using "id" as key here 

    /* sort keys */ 
    NSSortDescriptor *dateDescriptor = [NSSortDescriptor sortDescriptorWithKey:key ascending:ascending]; 
    return [NSArray arrayWithArray:[allKeys sortedArrayUsingDescriptors:@[dateDescriptor]]]; 
} 

:しかし、あなたはこのような何かを行うことができます。この配列を使用して元の辞書にアクセスできます。サンプルの実装は次のようになります。

for (NSString *key in [self sortedKeysFromDictionary:sampleDic ascending:NO]) 
{ 
    /* get value from current key */ 
    NSDictionary *currentDic = [sampleDic objectForKey:key]; 
} 
関連する問題