2016-07-24 2 views
0

Ich habe 2 Arrays:iOS - eindeutige Werte aus mehreren Arrays erhalten die gleiche Reihenfolge

Array ein: (@"26", @"26", @"25", @"25", @"3", @"3", @"4", @"4")

Array zwei: (@"sticker", @"sticker", @"sticker", @"sticker", @"sticker", @"frame", @"frame", @"frame")

bearbeiten

Diese 2-Arrays sind wie folgt verbunden:

26 - sticker 
26 - sticker 
25 - sticker 
25 - sticker 
3 - frame 
3 - frame 
4 - frame 
4 - frame 

Ich erhalte eindeutigen Wert in Array ein und es in einem anderen Array wie folgt setzen:

NSArray *uniqueArrayOne = [[NSSet setWithArray:arrayOne] allObjects]; 

So sieht uniqueArrayOne wie folgt aus:

(26, 25, 3, 4) 

ich uniqueArrayTwo wollen auch arrangieren sein mag, wie uniqueArrayOne wurde arrangiert. Ich möchte uniqueArrayTwo wie folgt aussehen:

(sticker, sticker, frame, frame) 

Was kann ich tun?

bearbeiten

Hier ist ein weiteres Beispiel:

Array ein: (@"TONY", @"SANSA", @"BILL", @"BILL", @"STEVE", @"STEVE")

Array zwei: (@"STARK", @"STARK", @"GATES", @"GATES", @"JOBS", @"JOBS")

Die Ergebnisse so sein sollte:

uniqueArrayOne: (TONY, SANSA, BILL, STEVE)

uniqueArrayTwo: (STARK, STARK, GATES, JOBS)

uniqueArrayTwo ist abhängig von uniqueArrayOne zu arrangieren.

+0

Sie müssen klarstellen, dass Sie möchten, dass die zweite Instanz jeder Zahl die Tanne bildet st Array. Es ist überhaupt nicht offensichtlich aus der Frage. – Avi

+1

Eigentlich sind Sie überhaupt nicht konsistent. Vielleicht hast du einen 'Rahmen' weggelassen? – Avi

+1

Mögliches Duplikat von [Wie wird ein NSArray von Strings in ein Array eindeutiger Strings umgewandelt, in der gleichen Reihenfolge?] (Http://stackoverflow.com/questions/4209823/how-to-turn-an-nsarray-of- Strings-in-ein-Array-of-Unique-Strings-in-der-gleichen-o) –

Antwort

0

Versuchen Sie diese.

NSArray *arrayOne = @[@"TONY", @"SANSA", @"BILL", @"BILL", @"STEVE", @"STEVE"]; 
NSArray *arrayTwo = @[@"STARK", @"STARK", @"GATES", @"GATES", @"JOBS", @"JOBS"]; 

NSArray *uniqueArrayOne = [[NSSet setWithArray:arrayOne] allObjects]; 
NSMutableArray *uniqueArrayTwo = [NSMutableArray array]; 

[uniqueArrayOne enumerateObjectsUsingBlock:^(id _Nonnull obj1, NSUInteger idx, BOOL * _Nonnull stop) { 
    NSUInteger found = [arrayOne indexOfObjectPassingTest:^BOOL(id _Nonnull obj2, NSUInteger idx, BOOL * _Nonnull stop) { 
     return [(NSString *)obj2 isEqualToString:(NSString *)obj1]; 
    }]; 
    [uniqueArrayTwo addObject:[arrayTwo objectAtIndex:found]]; 
}]; 

NSLog(@"%@, %@", uniqueArrayOne, uniqueArrayTwo); 
1

Ich würde lösen es auf diese Weise

- (void)uniqueArrayFinder 
{ 
    NSArray *array1 = [[NSArray alloc] initWithObjects: 
         @"TONY", @"SANSA", @"BILL", @"BILL", @"STEVE", @"STEVE",nil]; 
    NSArray *array2 = [[NSArray alloc] initWithObjects: 
         @"STARK", @"STARK", @"GATES", @"GATES", @"JOBS", @"JOBS",nil]; 

    NSMutableArray *combinedArray = [[NSMutableArray alloc] init]; 

    for (int i=0; i<[array1 count];i++) 
    { 
     NSString *arrayVal1 = [array1 objectAtIndex:i]; 
     NSString *arrayVal2 = [array2 objectAtIndex:i]; 
     NSString *combinedStr = [NSString stringWithFormat:@"%@ %@", arrayVal1, arrayVal2]; 
     [combinedArray addObject:combinedStr]; 
    } 

    //this gives uniqe values 
    NSSet *uniqueEvents = [NSSet setWithArray:combinedArray]; 
    [combinedArray removeAllObjects]; 
    [combinedArray addObjectsFromArray:[uniqueEvents allObjects]]; 

    NSLog(@"combinedArray: %@ ...", combinedArray); 


} 

Ausgang:

combinedArray: (
    "STEVE JOBS", 
    "TONY STARK", 
    "SANSA STARK", 
    "BILL GATES" 
) ... 
1

Sie können das gewünschte Ergebnis mit der folgenden erreichen,

NSArray *arr1 = @[@"26", @"26", @"25", @"25", @"3", @"3", @"4", @"4"]; 
NSArray *arr2 = @[@"sticker", @"sticker", @"sticker", @"sticker", @"sticker", @"frame", @"frame", @"frame"]; 

NSDictionary *dict = [NSDictionary dictionaryWithObjects:arr2 
            forKeys:arr1]; 

NSArray *distinctArr1 = [[NSOrderedSet orderedSetWithArray:arr1] array]; 

NSMutableArray *distinctArr2 = [NSMutableArray array]; 
for (NSString *num1 in distinctArr1) { 
    [distinctArr2 addObject:dict[num1]]; 
} 
// Your distinctArr2 is sorted based on distinctArr1's indices