2016-11-25 6 views
1

例: 私は2つを持っていますNSMutableArrayです。 1 @[1,2,3,4,5,6,7]。他のオブジェクトがあります他のプロパティと同じプロパティを持つオブジェクトをどのように取得するのですか?

@[ 
    @{@idObjectToSearch":1, @"name":@"aaaaa", @"surname": @"bbbbb"}, @{@idObjectToSearch":2, @"name":@"aaaaa", @"surname": @"ccccc"}, 
    ... 
    @{@idObjectToSearch":100, @"name":@"aaaaa", @"surname": @"cccdcd"} 
]; 

どのようにして2番目の配列から必要なオブジェクトをより効率的に取り出すことができましたか?

+1

あなたは二番目の配列からオブジェクトを抽出したいのかに基づいて、この2つの配列間のリンクは何ですか? – Rajat

+0

@Rajat "idObjectToSearch"ですべてのオブジェクトを必要としました – Viktorianec

+0

2番目の配列のオブジェクトを 'idObjectToSearch'の値でキーイングされた辞書にロードしない限り(これは私がやることです)、使用するテクニックはすべて線形です配列の検索 – Paulw11

答えて

2

NSPredicateを2番目の配列に使用する必要があります。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"idObjectToSearch IN %@", firstArray]; 
//In above predicate instead of passing `1` you need to pass object from first array that you want. 

NSArray *filterArray = [secondArray filteredArrayUsingPredicate:predicate]; 

//Now access Array objects 
if (filterArray.count > 0) { 
    NSLog(@"%@",filterArray); 
} 
+0

これは1つのオブジェクトだけを返しますが、例のように7つすべてが必要です。 ORで長い述語を作ることができましたが、これが私の場合には良い方法だとは思っていませんでした。 – Viktorianec

+0

@Viktorianecその後、編集された答えをチェックするために 'IN'を使う必要があります –

1

あなたのソートされたデータが含まれています。この

NSMutableArray * arrSorted = [NSMutableArray new]; 
for(int i=0;i<arr.count;i++) { 
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"idObjectToSearch == %@", firstArray[i]]; 
    NSUInteger index = [secondArray indexOfObjectPassingTest:^(id obj, NSUInteger idx, BOOL *stop) { 
     return [predicate evaluateWithObject:obj]; 
    }]; 
    if (index != NSNotFound) { 
     [arrSorted addObject:[arrM objectAtIndex:index]]; 
    } 
} 

arrSortedようにそれを行うことができます

関連する問題