0

我有一个存储在 plist 中的字典数组。字典键是:globalKey 和moneyKey。

现在我想在数组中搜索特定的键值。如果键值存在,我需要用另一个键的新值更新字典。

示例:我需要在键 @"globalKey" 中搜索值 5。如果值 5 存在,我需要使用键 @"moneyKey" 的新值更新该字典并将其保存到 plist。

最好的方法是什么?

这就是我添加新字典的方式:

array = [NSMutableArray arrayWithContentsOfFile:filePath];
NSDictionary *newDict = [[NSDictionary alloc] init];
newDict = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithInt:month],@"globalKey", [NSNumber numberWithFloat:money], @"moneyKey", nil];
[array addObject:newDict];
[array writeToFile:filePath atomically:YES];
4

2 回答 2

1

如果我了解您要正确执行的操作,那么我认为您可以尝试以下操作:

NSMutableArray *myArray = [[NSMutableArray alloc] init]; // YOUR STARTING ARRAY OF NSDICTIONARIES

NSMutableIndexSet *indexSet = [[NSMutableIndexSet alloc] init];
NSMutableArray *dictionariesToReplace = [[NSMutableArray alloc] init];

for (int i=0; i < [myArray count]; i++) 
{
    // Pull out the value to check
    int valToCheck = [[[myArray objectAtIndex:i] valueForKey:@"globalKey"] intValue];

    // Check if a match was made
    if (valToCheck == 5) 
    {
        // Make a copy of the existing NSDictionary
        NSMutableDictionary *newDictionary = [[myArray objectAtIndex:i] mutableCopy];
        [newDictionary setValue:@"NEW VALUE" forKey:@"moneyKey"];

        // Add the dictionary to the array and update the indexset
        [dictionariesToReplace addObject:newDictionary];
        [indexSet addIndex:i];
    }
}

// Update the array with the new dictionaries
[myArray replaceObjectsAtIndexes:indexSet withObjects:dictionariesToReplace];

希望这可以帮助你。

于 2012-05-31T13:28:34.357 回答
0

您可以使用 NSPredicate 搜索字典数组,如下所示:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"globalKey == 5"]; NSArray *predicateArray = [数组过滤数组UsingPredicate:谓词];

于 2012-05-31T13:26:04.867 回答