我在將要移植到ios(objective-c)的java代碼中使用TreeMap
。它應該和java的原版一樣高效(至少獲得.subMap()
s)。 Objective-C/Foundation中是否有任何已存在的類?任何現有的第三方庫如果沒有?Objective-C中的Java的TreeMap替換?
1
A
回答
0
最後,我能夠使用M13MutableOrderedDictionary
來存儲排序後的字典和額外的NSMutableIndexSet
來存儲排序後的鍵(你應該同時在字典和索引集之間進行同步)。爲了得到subMap(from, to)
應該使用NSMutableIndexSet方法找到最接近的現有價值:
indexGreaterThanOrEqualToIndex
indexLessThanIndex
- ...
他們幫助您根據自/至限制查找現有的密鑰和使用M13MutableOrderedDictionary的方法subOrderedDictionaryWithRange
得到subMap
。
用於存儲其他密鑰索引的開銷,但它仍然有效。沒有更好的方式在Objective-C中找到它,任何改進都會得到讚賞。感謝DarkDust。
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
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
。
所以你需要爲自己重建這個功能。一些指南:
- 關於subclassing
NSDictionary
to create an ordered dictionary有一篇不錯的文章。這是非常古老的(ARC之前的日子),但API和概念從那時起一直沒有改變(當然除了ARC)。 - 您可以使用
[myDict allKeys]
查詢字典的密鑰,然後您可以對其進行排序並獲取您的密鑰範圍。然後,您可以創建一個新的可變字典並複製相關的鍵/值。 - 或者,您創建密鑰範圍的倒數(也就是你創建密鑰的數組你不要保留),然後做一個
[myDict mutableCopy]
並刪除使用-[NSMutableDictionary removeObjectsForKeys:]
所有不需要的鑰匙。
順便提一句,請注意,與Java不同,Objective-C不允許您選擇實現,它會在運行時爲您自動選擇。這就是爲什麼只有兩類可供選擇:不可變的NSDictionary
和可變的NSMutableDictionary
。
相關問題
- 1. Java TreeMap的替代
- 2. 的Java:在TreeMap中
- 3. TreeMap中的Java TreeMap - 標識符錯誤?
- 4. Java的TreeMap庫?
- 5. 檢索的Java TreeMap中
- 6. 的iOS的ObjectiveC查找和替換/正則表達式
- 7. TreeMap to ArrayList Java
- 8. Java的TreeMap中的密鑰更新
- 9. 如何將Java TreeMap轉換爲Scala SortedMap?
- 10. Z3中的替換java
- 11. Java替換表中的值
- 12. 在java中的URL替換
- 13. ObjectiveC中的MulticastDelegate
- 14. 中的ObjectiveC
- 15. 帶可變鍵的Java TreeMap
- 16. 排序一個TreeMap的java
- 17. 在Java中使用TreeMap
- 18. 在TreeMap中搜索(Java)
- 19. 替換字符串替換的Java
- 20. 迭代超過兩TreeMap的在Java中
- 21. Java中的TreeMap模板構造
- 22. TreeMap中的天花板和地板java
- 23. 構建使用Java的TreeMap中
- 24. 如何從Java中的TreeMap獲取值?
- 25. 轉換方法從Java的ActionScript來的ObjectiveC
- 26. TreeMap中的java.util.ConcurrentModificationException
- 27. Java TreeMap比較器
- 28. Java SortedMap到Scala TreeMap
- 29. 在C#中替換並替換爲Java中的所有
- 30. 的Java TreeMap的返回鍵位置
不幸的是,我看不到任何'subMap(from,to)'方法。我可以使用額外的排序數組/集合來存儲排序後的鍵,並跳過使用任何第三方排序的詞典,但是無論如何我需要'sub(from,to)'和'first','last'方法。 – 4ntoine