Pra*_*tha 3 hashmap multimap rust data-structures
我有一个HashMap<u32, Sender>.Sender是一个打开的连接对象,键是用户ID.每个用户都可以从多个设备连接.我需要为同一个用户ID存储所有可能的打开连接.在此之后,我可以迭代并向同一用户的所有打开的连接发送消息.
以上HashMap仅存储每个用户ID和连接一次.我需要获得一个具有多个值的键.如何将值转换为列表或数组,以便我可以看到哪些连接存在并发送给它们?
我不是在谈论不同的价值类型,比如枚举.我说的是相同的类型值但不止一个.也许HashMap不是为此设计的?
其他想法也受到欢迎.
要HashMap使用a 来执行此操作,您应该使用a Vec作为值,以便每个键可以指向多个Senders.那种类型就是HashMap<u32, Vec<Sender>>.
使用这种结构,insert()当您需要改变这样的值时,只需使用就可以变得笨拙,但您可以使用EntryAPI一次性检索和更新记录.例如:
let mut hash_map: HashMap<u32, Vec<Sender>> = HashMap::new();
hash_map.entry(3)
// If there's no entry for key 3, create a new Vec and return a mutable ref to it
.or_insert_with(Vec::new)
// and insert the item onto the Vec
.push(sender);
Run Code Online (Sandbox Code Playgroud)
您也可以使用multimapcrate,它在引擎盖下做类似的事情,但增加了一层抽象.您可能会发现使用起来更容易:
let mut multi_map = MultiMap::new();
multi_map.insert(3, sender_1);
multi_map.insert(3, sender_2);
Run Code Online (Sandbox Code Playgroud)
该方法multi_map.get(key)将使用该键的第一个值,同时multi_map.get_vec(key)将检索所有这些值.
| 归档时间: |
|
| 查看次数: |
888 次 |
| 最近记录: |