gpt4 book ai didi

ios - 二维 NSArray 中的对象数

转载 作者:可可西里 更新时间:2023-11-01 05:05:50 24 4
gpt4 key购买 nike

我在 NSArray 中有一个 NSArray,所以:

@[
@[ @1, @2, @3 ],
@[ @7, @6 ]
]

如何使用方法 valueForKeyPath: 获取每个数组中的项数,因此:

@[ @3, @2 ]

我已经尝试过 [array valueForKeyPath:@"@count"] 但它提供与 [array count] 相同的答案(所以 2)和 [数组 valueForKeyPath:@"count"]

最佳答案

结合使用 @unionOfObjects@count KVC 集合运算符:

NSArray *counts = [array valueForKeyPath:@"@unionOfObjects.@count"];

在这种情况下记录 counts 会产生:

counts = (
3,
2
)

NSArray 实例上调用 valueForKey: 及其变体通常用于返回由调用 valueForKey: 的结果形成的数组接收器中的每个元素。因此,[array valueForKey:@"count"] 不会返回 -[NSArray count] 返回的值,而是会调用 valueForKey:@"count " 在其每个元素上。嵌套在其他数组中的数组不会有任何不同,因此我们不能直接使用 @"count" 作为我们的关键路径,因为它会尝试将计算委托(delegate)给它的每个元素。使用 @"@count" 作为键路径也不起作用,因为它在其左侧的键上运行,这暗示为 valueForKeyPath: 方法,当没有指定其他关键路径时。

我们需要的是一种方法来指定 @count 运算符不计算封闭数组,而是计算其中的元素。在我们的关键路径中使用 @unionOfObjects 集合运算符可以实现这一点。如果我们有一个关键路径,例如:

@unionOfObjects.$COLLECTION.$REST_OF_KEYPATH

然后返回的结果将是由发送 $COLLECTION 的每个元素的结果形成的数组 valueForKeyPath: 带有 $REST_OF_KEYPATH 的消息作为论据。最后一个事实 - 当 valueForKeyPath: 消息的接收者本身是一个集合时,则可以在 key 路径中使用字符串 self $COLLECTION.

因此,我们的关键路径应该是这样的:

@"@unionOfObjects.self.@count"

这指定将返回一个数组,其中每个元素都是将 -valueForKeyPath:@"@count" 发送到接收器中每个元素的结果。最后,我不确定这样做是否可取,但似乎 self 可以完全从键路径中删除,只要 @unionOfObjects 运算符不是键路径的唯一组成部分。在这种情况下,它替代了关键路径的 @unionOfObjects.$COLLECTION 组件。

关于ios - 二维 NSArray 中的对象数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19649158/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com