作者:李小欠儿724_579 | 来源:互联网 | 2022-12-09 11:58
我有一个HashMap
.Sender
是一个打开的连接对象,键是用户ID.每个用户都可以从多个设备连接.我需要为同一个用户ID存储所有可能的打开连接.在此之后,我可以迭代并向同一用户的所有打开的连接发送消息.
以上HashMap
仅存储每个用户ID和连接一次.我需要获得一个具有多个值的键.如何将值转换为列表或数组,以便我可以看到哪些连接存在并发送给它们?
我不是在谈论不同的价值类型,比如枚举.我说的是相同的类型值但不止一个.也许HashMap
不是为此设计的?
其他想法也受到欢迎.
1> Peter Hall..:
要HashMap
使用a 来执行此操作,您应该使用a Vec
作为值,以便每个键可以指向多个Sender
s.那种类型就是HashMap>
.
使用这种结构,insert()
当您需要改变这样的值时,只需使用就可以变得笨拙,但您可以使用Entry
API一次性检索和更新记录.例如:
let mut hash_map: HashMap> = 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);
您也可以使用multimap
crate,它在引擎盖下做类似的事情,但增加了一层抽象.您可能会发现使用起来更容易:
let mut multi_map = MultiMap::new();
multi_map.insert(3, sender_1);
multi_map.insert(3, sender_2);
该方法multi_map.get(key)
将使用该键的第一个值,同时multi_map.get_vec(key)
将检索所有这些值.