我正在尝试使用KVC使二维字典数组扁平化。
NSArray *toBeFlatten = @[@[@{@1:@1}],@[@{@2:@2}]]; NSArray *flat = [toBeFlatten valueForKeyPath:@"@unionOfArrays.self"]; // flat:@[NSNull.null, NSNull.null];
为什么词典“转换”为NSNull?
这是因为它valueForKeyPath:
也适用于字典。以及它如何运作?它在每个字典中查找,尝试"self"
用作键,没有找到这样的键,然后返回NSNull表示缺少的值。
要了解我的意思,请考虑您的示例中的这种变化:
NSArray *toBeFlatten = @[@[@{@"self":@"hey"}],@[@{@"other":@"ho"}]]; NSArray *flat = [toBeFlatten valueForKeyPath:@"@unionOfArrays.self"];
结果为@[@"hey", NSNull.null]
— 第一个字典中"hey"
匹配的键的值"self"
,而为null,因为第二个字典中没有匹配的键。
你大概的意思说的是valueForKeyPath:@"@unionOfArrays.@self"
(通知at符号,使self
运营商,而不是一个键)。