web-dev-qa-db-ja.com

NSArrayで文字列を検索します

NSArrayで特定の文字列を検索したいと思います。

例:

NSArrayには、「dog」、「cat」、「fat dog」、「thing」、「anotherthing」、「heck here's another anotherthing」のオブジェクトがあります。

「別の」という単語を検索して結果を1つの配列に入れ、結果以外の別の配列を別の配列に入れて、さらにフィルター処理したい。

19
Matt S.

テストされていないので構文エラーがあるかもしれませんが、あなたはアイデアを得るでしょう。

NSArray* inputArray = [NSArray arrayWithObjects:@"dog", @"cat", @"fat dog", @"thing", @"another thing", @"heck here's another thing", nil];

NSMutableArray* containsAnother = [NSMutableArray array];
NSMutableArray* doesntContainAnother = [NSMutableArray array];

for (NSString* item in inputArray)
{
  if ([item rangeOfString:@"another"].location != NSNotFound)
    [containsAnother addObject:item];
  else
    [doesntContainAnother addObject:item];
}
37
Ken Aspeslagh

配列内の文字列が異なることがわかっている場合は、セットを使用できます。 NSSetは、大きな入力のNSArrayより高速です。

NSArray * inputArray = [NSMutableArray arrayWithObjects:@"one", @"two", @"one again", nil];

NSMutableSet * matches = [NSMutableSet setWithArray:inputArray];
[matches filterUsingPredicate:[NSPredicate predicateWithFormat:@"SELF contains[c] 'one'"]];

NSMutableSet * notmatches = [NSMutableSet setWithArray:inputArray];
[notmatches  minusSet:matches];
47
diciu

ドキュメント「indexOfObjectIdenticalTo:」により、渡されているオブジェクトと同じメモリアドレスを持つ最初のオブジェクトのインデックスが返されるため、機能しません。

配列を走査して比較する必要があります。

1
mhrrt