4

一致する値を見つけるために調べたい辞書の配列があります。それをカウント == 配列の N 番目の項目

配列の各項目は次のようになります

HMOD = 0;
MID = 39;
MOD = SOMETHING; // looking for this value
ID = 50;

したがって、一致する値が見つかるまで配列を通過するループを作成したいと思います。次に、カウント内の数値を次のビューのインデックス パスへの参照として使用します。

私はこのコードを書きましたが、これは機能しません...しかし、私が作成しようとしているループのアイデアが得られることを願っています.

int count = 0;
while (singleName != [[ModArray valueForKey:@"MOD"] objectAtIndex:count]) {
                    count ++;
                    NSLog(@"%i", count);
                }

SingleName は、ModArray の MOD 値と一致させるために使用している NSString です...どんな助けも大歓迎です。

4

3 に答える 3

10

valueForKeyこれは、辞書の配列で使用することによるより簡単なソリューションです。

modArrayあなたがこのようなものであると仮定すると、

NSArray *modArray = [NSArray arrayWithObjects:[NSDictionary dictionaryWithObject:@"0" forKey:@"HMOD"],
                       [NSDictionary dictionaryWithObject:@"39" forKey:@"MID"],
                       [NSDictionary dictionaryWithObject:@"something" forKey:@"MOD"],
                       [NSDictionary dictionaryWithObject:@"50" forKey:@"ID"], nil];

そしてsingleName、次のような値を持っています"something"

    NSString *singleName = @"something";

のようにキーを持つオブジェクトを持つ を取得arrayします。modArray"MOD"

    NSArray *array = [modArray valueForKey:@"MOD"];

singleNameこの に が存在するかどうかを確認しますarrayMODはいの場合は、そのオブジェクトの最初のインデックスを取得します。これは、 のキー " " を持つ辞書のインデックスと同じになりますmodArray

    if ([array containsObject:singleName]) {
        NSLog(@"%d", [array indexOfObject:singleName]);
    } else {
        NSLog(@"%@ is not present in the array", singleName);
    }

更新: 自分のやり方でやりたい場合は、 を使用!=する必要があったのに を使用していたのは間違いでしたisEqualToString。こうすれば良かったのに、

int count = 0;
while (![singleName isEqualToString:[[modArray valueForKey:@"MOD"] objectAtIndex:count]]) {
                    count ++;
                    NSLog(@"%i", count);
                }
于 2012-10-31T05:07:44.050 に答える
3

あなたのコードはすべて裏返しに見えます。あなたは辞書の配列を持っていると述べています。が配列であると仮定するとModArray(名前に基づいて)、これを行うことができます:

NSUInteger count = 0;
for (NSDictionary *dict in ModArray) { // iterate through the array
    NSString *mod = dict[@"MOD"];      // get the value for MOD
    if ([mod isEqualToString:singleName]) {  // compare the two strings
        break;                         // they match so exit the loop
    }
    count++
}

// count has the index of the dictionary with the matching MOD value

編集: の私の誤解を訂正する ACB に基づいてNSArray valueForKey:、唯一の本当の問題は != を使用して 2 つの文字列を比較することです。

于 2012-10-31T03:56:15.907 に答える