gpt4 book ai didi

iOS 二分搜索代码在超过 256 项时崩溃

转载 作者:行者123 更新时间:2023-11-28 23:31:01 25 4
gpt4 key购买 nike

我使用 iOS 默认代码在数组中存在的自定义字典对象中搜索字符串,意思是字典项数组。

NSRange searchRange = NSMakeRange(0, artistThumbnail.count);
index = [artistThumbnail indexOfObject:artist
inSortedRange:searchRange
options:NSBinarySearchingLastEqual
usingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {
NSString *artistName = (NSString *)obj2;
NSDictionary *artistThumbnail = (NSDictionary *)obj1;
NSString *artistToCompare = artistThumbnail[_artist_thumb];
NSComparisonResult result = [artistToCompare compare:artistName];
return result;
}];

当我使用少于等于 256 个对象的相同代码时,代码工作正常没有崩溃,Obj1Obj2 都有字典对象,但是当数组有 >256 items 然后它崩溃了,我注意到 obj1 和 obj2 与以前不同,总是以 NSDictionary 格式出现。

最佳答案

问题是您的比较对象与数组元素的类型不同。如果您将数组正确键入为 NSArray<NSDictionary *> *你会收到一条警告说参数 indexOfObject应该是 NSDictionary * 类型.

此外,您不能依赖 artist对象总是作为 obj2 传递到比较函数。文档对此没有任何说明,因此您应该假设它可以作为 obj1 传递。有时和obj2其他时间。

要解决它,您可以嵌入 artist在字典中使其与这样的数组元素具有相同的格式 @{ _artist_thumb: artist } .然后以相同的方式从两个参数中检索名称。

NSRange searchRange = NSMakeRange(0, artistThumbnail.count);
index = [artistThumbnail indexOfObject:@{ _artist_thumb: artist }
inSortedRange:searchRange
options:NSBinarySearchingLastEqual
usingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {
NSString *artistName = ((NSDictionary *)obj2)[_artist_thumb];
NSDictionary *artistThumbnail = (NSDictionary *)obj1;
NSString *artistToCompare = artistThumbnail[_artist_thumb];
NSComparisonResult result = [artistToCompare compare:artistName];
return result;
}];

关于iOS 二分搜索代码在超过 256 项时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56478164/

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