2

plist から作成された別の辞書の配列のフィルターとして使用したい文字列の配列があります。たとえば、次のような辞書の plist があるとします。

Key:      Value:
car1      audi
car2      bmw
car3      bmw
car4      audi
car5      jaguar

私の文字列の配列は「アウディ、ジャガー」でした。「car1、car4、car5」を返す新しい配列を作成できるようにするには、どのようにコーディングすればよいでしょうか? これが理にかなっていることを願っています。さらに良いことに、このディクショナリを調べて、値に基づいてフィルター処理し、使用する新しいディクショナリの配列を作成するにはどうすればよいでしょうか。

コード:

-(void)plotStationAnnotations {

desiredDepartments = [[NSMutableArray alloc] init];

BOOL tvfrSwitchStatus = [[NSUserDefaults standardUserDefaults] boolForKey:@"tvfrSwitchStatus"];
BOOL hfdSwitchStatus =  [[NSUserDefaults standardUserDefaults] boolForKey:@"hfdSwitchStatus"];

if (tvfrSwitchStatus) {
    NSString *tvfr = @"TVF&R";
    [desiredDepartments addObject:tvfr];
}
if (hfdSwitchStatus) {
    NSString *hfd = @"HFD";
    [desiredDepartments addObject:hfd];
}

NSLog(@"Array 1 = %@", desiredDepartments);

NSString *path = [[NSBundle mainBundle] pathForResource:@"stationAnnotations" ofType:@"plist"];
NSMutableArray *anns = [[NSMutableArray alloc] initWithContentsOfFile:path];

NSMutableArray *newDictionaryArray = [NSMutableArray array];
for (NSDictionary *dictionary in anns) {
    for (NSString *string in desiredDepartments) {
        if ([dictionary allKeysForObject:string]) {
            [newDictionaryArray addObject:dictionary];
            break;
        }
    }
}

NSLog(@"Array = %@", keyMutableArray);

for (int i = 0; i < [keyMutableArray count]; i++) {

    float realLatitude = [[[keyMutableArray objectAtIndex:i] objectForKey:@"latitude"] floatValue];
    float realLongitude = [[[keyMutableArray objectAtIndex:i] objectForKey:@"longitude"] floatValue];

    StationAnnotations *myAnnotation = [[StationAnnotations alloc] init];
    CLLocationCoordinate2D theCoordinate;
    theCoordinate.latitude = realLatitude;
    theCoordinate.longitude = realLongitude;
    myAnnotation.coordinate = theCoordinate;
    myAnnotation.title = [[keyMutableArray objectAtIndex:i] objectForKey:@"station"];
    myAnnotation.subtitle = [[keyMutableArray objectAtIndex:i] objectForKey:@"department"];
    [mapView addAnnotation:myAnnotation];
}
}
4

2 に答える 2

0

キーでフィルタリングするには、次のようにします。

NSArray *keysToLookFor = [NSArray arrayWithObjects:@"car1", @"car4", @"car5", nil];
NSArray *foundObjects = [dictionary objectsForKeys:keysToLookFor notFoundMarker:nil];

または、値でフィルタリングするには次のようにします。

NSString *valueToLookFor = @"Audi";
NSArray *keyArray = [dictionary allKeysForObject:valueToLookFor];

// To filter by multiple values
NSArray *valuesToFilterBy = [NSArray arrayWithObjects:@"Bmw", @"Audi", nil];
NSMutableArray *keyMutableArray = [NSMutableArray array];
for (NSString *string in valuesToFilterBy) {
    [keyMutableArray addObjectsFromArray:[dictionary allKeysForObject:string]];
}

配列内の辞書の更新された回答:

NSArray *dictionaryArray; // The array of dictionaries that you have
NSMutableArray *newDictionaryArray = [NSMutableArray array];
NSArray *valuesToFilterBy = [NSArray arrayWithObjects:@"Bmw", @"Audi", nil];
for (NSDictionary *dictionary in dictionaryArray) {
    for (NSString *string in valuesToFilterBy) {
        if ([dictionary allKeysForObject:string]) {
            [newDictionaryArray addObject:dictionary];
            break;
        }
    }
}
于 2012-12-10T06:01:27.507 に答える
0

のようなものかもしれません

NSArray *array1;
if([array1 containsObject : someValue])

助けられる。someValue は、array1 に存在するかどうかを確認する値にすることができます。

于 2012-12-10T05:27:19.107 に答える