我在java代码中使用TreeMap
,它将被移植到ios(objective-c)。它应该与java的原始效率一样高效(至少获得 .subMap()
s )。 Objective-C / Foundation中是否有现有的课程?任何现有的第三方图书馆如果缺席?
答案 0 :(得分:1)
试试这个旧的cocoa-sorted-dictionary库。
SortedDictionary *dict = [MutableSortedDictionary dictionary];
[dict setValue: @"red" forKey: @"apple"];
[dict setValue: @"yellow" forKey: @"banana"];
[dict setValue: @"orange" forKey: @"orange"];
NSString *color = [dict objectForKey: @"apple"];
您可以通过阅读此documentation
来检查这个是否真的是您想要的答案 1 :(得分:0)
修改强>
看看M13OrderedDictionary。这允许您使用subOrderedDictionaryWithRange:
生成新的有序词典,大致相当于subMap
(您必须自己确定范围)。
你可以这样做:
// NSArray *allKeys = [orderedDict allKeys];
// NSUIndex from = [allKeys indexOfObject:fromObject];
// NSUIndex to = [allKeys indexOfObject:toObject];
NSUInteger from = [orderedDict indexOfKey:fromObject];
NSUInteger to = [orderedDict indexOfKey:fromObject];
if (from != NSNotFound && to != NSNotFound) {
M13OrderedDictionary *newDict = [orderedDict subOrderedDictionaryWithRange:NSMakeRange(from, to-from)];
}
旧回答:
Java TreeMap
是一个有序地图(Java用语)或字典(Objective-C用语)。没有本机Objective-C等价物,我不知道任何类似subMap
的第三方实现。
因此,您需要自己重建此功能。一些指南:
NSDictionary
to create an ordered dictionary上有一篇很好的文章。这是相当古老的(ARC之前的日子),但API和概念从那以后没有改变(当然除了ARC)。[myDict allKeys]
查询字典的键,然后您可以对其进行排序并获取您的键范围。然后,您可以创建一个新的可变字典并复制相关的键/值。[myDict mutableCopy]
并删除所有键使用-[NSMutableDictionary removeObjectsForKeys:]
的不需要的密钥。NSDictionary
和可变的NSMutableDictionary
。
答案 2 :(得分:0)
最后,我能够使用M13MutableOrderedDictionary
来存储已排序的字典,并使用额外的NSMutableIndexSet
来存储已排序的键(您应该在字典和索引集之间进行同步更改)。要获得subMap(from, to)
,应使用NSMutableIndexSet方法找到最接近的现有值:
indexGreaterThanOrEqualToIndex
indexLessThanIndex
它们可以帮助您根据自/到限制查找现有密钥,并使用M13MutableOrderedDictionary的方法subMap
获取subOrderedDictionaryWithRange
。
用于存储附加键索引的开销,但无论如何都可以。没有更好的方法在Objective-C中找到它,任何改进都值得赞赏。感谢 DarkDust 。