0

私は NSStrings の NSArray を持っており、配列内の各項目を配列内の他のすべての項目と比較して、残りとは異なる文字列があるかどうかを確認する方法を知りたいです。

私はC++の例を見てきました

for (int i = 0; i < list.size(); i++) {
  for (int j = i+1; j < list.size(); j++) {
    // compare list.get(i) and list.get(j)
  }
}

しかし、Objective C にもっと簡単な方法がある場合、負傷していましたか? また、ループ中に項目が比較されないようにする必要があります。

どんな助けや例も大歓迎です。

更新**太字は質問の更新された部分です**

4

3 に答える 3

4

あなたの質問を正しく読んだ場合、リストに一度だけ表示される文字列が必要ですよね?

NSCountedSet *counted = [NSCountedSet setWithArray:list];
for (NSString *string in counted) {
    NSUInteger count = [counted countForObject:string];
    if (count == 1) {
        // process "string", it appears in the list just once
    }
}

リストに複数の異なる値があるかどうかだけを知りたい場合は、次のようにします。

NSSet *set = [NSSet setWithArray:list];
if (set.count == 1) {
    // There is only one distinct value in the list
} else {
    // There is more than one distinct value in the list
}
于 2012-11-29T23:03:19.733 に答える
0

NSMutableDictionary を使用します。これは、「2 つのリストを一意の値にマージする」に非常に似ています。実際には、Apple のドキュメントのどこかで複雑な方法が説明されています。どこで見つけたか忘れましたが、簡単な方法は次のとおりです。元の配列の順序を維持しながら、2 つの配列をマージします。

したがって、すべてをループし、キー (文字列に設定) があるかどうかを確認し、ない場合は setObject: forKey: メソッドを使用して追加し、辞書を列挙するか、allKeys 値を取得します。

于 2012-11-29T22:32:44.200 に答える
0

2セット使います。文字列が競合せずに最初のセットに入った場合は、2 番目のセットに追加します。最初のセットで文字列が競合する場合は、2 番目のセットから削除します。すべての文字列を処理すると、2 番目のセットには一意の文字列が含まれます。

于 2012-11-30T00:34:39.543 に答える