gpt4 book ai didi

objective-c - 检查 NSString 是否存在于 NSArray 中的自定义对象中

转载 作者:行者123 更新时间:2023-11-28 18:06:33 24 4
gpt4 key购买 nike

我有一个 NSArrayStore 对象。每个 Store 对象都有两个 NSString 对象; StoreIDName。我想快速检查此 NSArray 中是否存在带有 Store 对象的 ID。

例子:

Store *s1 = [[Store alloc] init];
s1.name = @"Some Name";
s1.id = @"123ABC";

Store *s2 = [[Store alloc] init];
s2.name = @"Some Other Name";
s2.id = @"ABC123";

NSArray *array = [[NSArray alloc] initWithObjects:s1, s2, nil];

NSString *myIdOne = @"ABCDEF";
NSString *myIdTwo = @"123ABC";

BOOL myIdOneExists = ...?
BOOL myIdTwoExists = ...?

它是 ...? 我需要弄清楚。我知道我可以使用 for 循环来做到这一点,并在找到时中断...但这在我看来是一种令人讨厌的方法,因为 NSArray 可能包含数千个对象。 ..理论上。
所以我想知道一个更好的解决方案。

最佳答案

事情是这样的:无论您采用何种解决方案,它或多或少都会归结为“遍历数组并返回是否找到对象”。除非满足非常特定的条件(例如,数组已经按您正在搜索的值排序),否则没有比这更快的搜索数组的方法。您可以使用谓词,可以使用枚举器,可以使用快速枚举,也可以使用测试 block ——在幕后,它们都相当于“遍历数组并执行测试”。这就是数组的工作原理。

如果这是您需要经常做的事情并且性能是天真的解决方案的问题,一个明智的解决方案可能是将您的 ID 缓存在 NSSet 中。集合针对快速成员检测进行了调整,因此您应该能够比使用数组更快地获得答案。

我个人的“数组循环”解决方案:

BOOL idExists = NSNotFound != [stores indexOfObjectPassingTest:^(Store *store, NSUInteger idx, BOOL *stop) {
return [store.id isEqualToString:@"whatever"];
}];

(在浏览器中编写,所以,你知道,请注意编译器。)

关于objective-c - 检查 NSString 是否存在于 NSArray 中的自定义对象中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13748511/

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