使用 KVC 展平一系列字典
Flatten an array of dictionaries with KVC
我正在尝试使用 KVC 展平字典的二维数组。
NSArray *toBeFlatten = @[@[@{@1:@1}],@[@{@2:@2}]];
NSArray *flat = [toBeFlatten valueForKeyPath:@"@unionOfArrays.self"];
// flat:@[NSNull.null, NSNull.null];
为什么字典 "converted" 为 NSNull?
这是因为 valueForKeyPath:
也适用于 字典 。它是如何工作的?它在每个字典中查找,尝试使用"self"
作为键,没有找到这样的键,并且returns NSNull 来表示缺失值。
要明白我的意思,请考虑您示例的这个变体:
NSArray *toBeFlatten = @[@[@{@"self":@"hey"}],@[@{@"other":@"ho"}]];
NSArray *flat = [toBeFlatten valueForKeyPath:@"@unionOfArrays.self"];
结果是 @[@"hey", NSNull.null]
— 第一个字典中匹配键 "self"
的值 "hey"
,第二个字典中没有匹配的键,因此为 null。
您可能的意思是valueForKeyPath:@"@unionOfArrays.@self"
(注意at-sign,使self
成为运算符,而不是键)。
我正在尝试使用 KVC 展平字典的二维数组。
NSArray *toBeFlatten = @[@[@{@1:@1}],@[@{@2:@2}]];
NSArray *flat = [toBeFlatten valueForKeyPath:@"@unionOfArrays.self"];
// flat:@[NSNull.null, NSNull.null];
为什么字典 "converted" 为 NSNull?
这是因为 valueForKeyPath:
也适用于 字典 。它是如何工作的?它在每个字典中查找,尝试使用"self"
作为键,没有找到这样的键,并且returns NSNull 来表示缺失值。
要明白我的意思,请考虑您示例的这个变体:
NSArray *toBeFlatten = @[@[@{@"self":@"hey"}],@[@{@"other":@"ho"}]];
NSArray *flat = [toBeFlatten valueForKeyPath:@"@unionOfArrays.self"];
结果是 @[@"hey", NSNull.null]
— 第一个字典中匹配键 "self"
的值 "hey"
,第二个字典中没有匹配的键,因此为 null。
您可能的意思是valueForKeyPath:@"@unionOfArrays.@self"
(注意at-sign,使self
成为运算符,而不是键)。