:機能findName
は、単純な二分探索である
int index = [self findName:@"John Smith"];
NSString *answer = nil;
if (index >= 0) {
answer = [yesNoArray objectAtIndex:index];
}
return answer;
。これはもちろん可能ですが、あるアレイを変更するたびに、他のアレイに対応する変更を行うことを忘れないでください。自分の好きなことをして、データの格納方法を再考することで、バグ全体を回避してください。
この場合、{person、boolean}のペアがあります。 1つの選択肢は、各ペアを辞書として保存し、それらの辞書の配列を保持することです。あなたが持っている2つのデータの数を超えてデータの数を増やすことができれば、これは特に良い計画です。もう一つの選択肢は、キーが人名で、その値があなたのyes/no値である辞書を使うことです。これは、あなたの質問への答えは非常に簡単になります:
NSString *yesOrNo = [personDictionary objectForKey:personName];
は、バックあなたはまだ二つの配列を持っているあなたの元の質問に取得あなたが見つけるまで、実行する最も簡単事は人の配列を反復することですあなたが探している人、その名のインデックスを取得した後、はいに対応する値を検索/いいえ配列:
for (person in peopleArray) {
if ([person isEqualToString:thePersonYoureLookingFor]) {
yesNoValue = [yesNoArray objectAtIndex:[peopleArray indexOfObject:person];
break;
}
}
リスト中の人の数があまりにも大きくない場合には罰金です。リストが大きい場合は、バイナリ検索ができるように人物配列をソートしたままにしておきたいでしょう。そこでの問題は、あなたがはい/いいえ配列が分かれていることです。そうすれば、正しい順序でyes/no配列を保持しながらpersonArrayをソートするのは複雑になります。
名前の配列をソート済みまたはソート済みのままにしますか? –
@Bavarious Unsortedですが、サーバーによって生成されるため、重複はありません。 PengOneは私の質問に答えました。私はindexOfObjectメソッドを探していました。 – Preston