2011-02-10 5 views
0

配列の要素に基づいてフィルターをかけたい配列の辞書があります。私の辞書には、私は3番目の項目(タイムゾーンID)が「アメリカ/アダック」であるすべてのキー例えば、第三項目に基づいて、辞書をフィルタリングしたい...配列の辞書をフィルターする方法

"Abu Dhabi, U.A.E." =  (
    "24.466665", 
    "54.416668", 
    "Asia/Dubai" 
); 
"Accra, Ghana" =  (
    "5.583333", 
    "-0.100000", 
    "Africa/Accra" 
); 
"Adak, America" =  (
    "", 
    "", 
    "America/Adak" 
); 
"Addis Ababa, Ethiopia" =  (
    "9.050000", 
    "38.700001", 
    "Africa/Addis_Ababa" 
); 

次のようになります。

私はkeysOfEntriesPassingTestでこれを行うことができると思いますが、これを行う方法は紛失しています。私はいくつかのサンプルコードを見つけました...

mySet = [myDict keysOfEntriesPassingTest:^(id key, id obj, BOOL *stop) { 
      if([[obj port] isEqual: [NSNumber numberWithInt: 8080]]) { 
       return YES; 
      else 
       return NO; 
      }] 

しかし私は私の場合に動作するようにこれを書き直す方法を見つけることができません。私は必要な構文を理解していません。

このフィルタの実装方法を教えてください。

おかげで、ジョン・

答えて

5
mySet = [myDict keysOfEntriesPassingTest:^(id key, id obj, BOOL *stop) { 
       if ([[obj objectAtIndex:2] isEqualToString:@"America/Adak"]) { 
        return YES; 
       } else { 
        return NO; 
       } 
       }]; 

メソッドの名前が示すように、結果セットはキーのみではなく、配列そのものが含まれています、ということに注意してください。

+0

もう一度ありがとう。私がこの方法の構文を理解するのを助けることができたら、 keysOfEntriesPassingTestとは何ですか:^(id key、id obj、BOOL * stop)は私に教えています。 Objは格納されたオブジェクトでなければなりませんが、どのようにkeyを使用し、BOOL * stopは何ですか? ok私はそれを得ていると思う...私はキーを使用して、含まれているか始まるような種類のマッチのためにキーをテストすることができます。私は最初の一致が見つかったときにストップを使ってフィルタリングを止めることができると思います???どのように停止を使用するかわからない。 – user278859

+1

'keysOfEntriesPassingTest:'メソッドは辞書を繰り返し処理し、辞書に格納されているすべてのオブジェクトに対して中括弧でコードブロックを呼び出します。このブロックでは、 'key'を使って現在の値の' key'を得ることができます(例えば '@" Adak、America "の場合)、' obj'は値自体、 'stop'は方法です特定のポイントで反復を停止するようにメソッドに指示します。そう、はい、それはあなたが仮定するように動作します。ブロックが 'YES'を返すオブジェクトごとに、メソッドはオブジェクトのキーを最終的にあなたに戻すセットに格納します。 –

0

オレ、ありがとうございます!

見つかったサンプルコードのifステートメントが正しくフォーマットされていませんでした。私はあなたが私のために適切な部分だけを改訂したと思う。この質問を見て他の人の利益のために、ここに最終的な作業コードがあります...

mySet = [citiesDictionary keysOfEntriesPassingTest:^(id key, id obj, BOOL *stop) 
     { 
      if([[obj objectAtIndex:2] isEqualToString:@"America/Adak"]){ 
       return YES; 

      }else { 
       return NO; 
      } 
     }]; 
関連する問題