是否存在保留插入順序(認爲Vec)但僅跟蹤唯一值(認爲是HashSet)的類型?我想避免使用Vec
,因爲在插入之前我首先需要檢查它的值是否存在。保留插入順序的集合類型
1
A
回答
1
linked_hash_set
箱子現在可用。它基於儘可能接近鏡像std HashSet
API的箱子。
extern crate linked_hash_set;
use linked_hash_set::LinkedHashSet;
let mut set = LinkedHashSet::new();
set.insert(234);
set.insert(123);
set.insert(345);
set.insert(123);
assert_eq!(set.into_iter().collect::<Vec<_>>(), vec![234, 345, 123]);
3
linked-hash-map
箱子提供了一個包含鍵值插入順序的哈希映射。我們可以創建使用()
爲值這個哈希地圖一套包裝(std::collections::HashSet
實現這樣):
extern crate linked_hash_map;
use linked_hash_map::*;
use std::collections::hash_map::RandomState;
use std::hash::{BuildHasher, Hash};
use std::borrow::Borrow;
fn main() {
let mut s = LinkedHashSet::new();
s.insert(5);
s.insert(3);
s.insert(7);
s.insert(1);
assert_eq!(vec![5, 3, 7, 1], s.iter().cloned().collect::<Vec<_>>());
s.remove(&7);
assert_eq!(vec![5, 3, 1], s.iter().cloned().collect::<Vec<_>>());
s.remove(&5);
assert_eq!(vec![3, 1], s.iter().cloned().collect::<Vec<_>>());
}
pub struct LinkedHashSet<K, S = RandomState>(LinkedHashMap<K,(), S>);
impl<K: Hash + Eq> LinkedHashSet<K> {
pub fn new() -> Self {
LinkedHashSet(LinkedHashMap::new())
}
}
impl<K: Hash + Eq, S: BuildHasher> LinkedHashSet<K, S> {
pub fn insert(&mut self, k: K) -> Option<()> {
self.0.insert(k,())
}
pub fn contains<Q: ?Sized>(&self, k: &Q) -> bool
where K: Borrow<Q>,
Q: Eq + Hash
{
self.0.contains_key(k)
}
pub fn remove<Q: ?Sized>(&mut self, k: &Q) -> Option<()>
where K: Borrow<Q>,
Q: Eq + Hash
{
self.0.remove(k)
}
pub fn iter(&self) -> Keys<K,()> {
self.0.keys()
}
}
您可以實現其他方法。請參閱LinkedHashMap
docs。
相關問題
- 1. 來自LinkedHashMap的集合(值)是否保留了插入順序?
- 2. ,保留插入順序
- 3. 從map.values()方法檢索的集合是否保留了插入順序?
- 4. 維護插入順序的Java集合
- 5. Backbone.js集合保留新的排序順序?
- 6. 「插入順序保存在集合中」是什麼意思?
- 7. C#集合類型,以保持索引順序
- 8. Java Collections.unmodifiableCollection是否保留底層集合的順序?
- 9. 證明Excel VBA Scripting.Dictionary不會保留項目插入的順序
- 10. 保留番石榴的插入順序SetMultimap
- 11. 如何保留嵌套Perl哈希的插入順序?
- 12. 骨幹集合保持模型突變的排序順序
- 13. Java集合只保留n個最後插入的成員
- 14. Java集合是有序的按照插入順序
- 15. 保留數組的順序
- 16. 自適應地圖Scala中(或Java)保留插入順序
- 17. 使用boost multi_index_container來保留插入順序
- 18. 保存順序的Ruby字符串/數組組合保留順序
- 19. OrderedDict不保留順序
- 20. Seq.groupBy:保留原始順序
- 21. ActiveRecord.find(array_of_ids),保留順序
- 22. 有沒有一種算法可以在保留O(1)插入/刪除的同時保證收集順序?
- 23. jQuery插件asmSelect不保留排序順序
- 24. 大熊貓合併不保留排序順序
- 25. 插入並保存與貓鼬集合
- 26. 我需要一個不變的鍵值結構,保留插入順序
- 27. 保留的順序進行查詢時
- 28. HQL保留子查詢的順序
- 29. 保留表中的商品順序
- 30. 保留函數實現的順序
您是否看到[linked-hash-map](https://crates.io/crates/linked-hash-map)箱子?也許你可以用'V =()'創建一個換行。 – malbarbo
本質上是http://stackoverflow.com/q/30243100/155423的副本,因爲集合只是沒有價值的地圖。 – Shepmaster
如果您需要的唯一更改是添加元素並且元素是可複製的,則可以簡單地同時使用集合和矢量,使用重複檢查集合和矢量按順序存儲元素。 – CodesInChaos