使用 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成为运算符,而不是键)。