gpt4 book ai didi

vector - 附加到向量作为 hashmap 的值

转载 作者:行者123 更新时间:2023-11-29 07:43:02 25 4
gpt4 key购买 nike

如何附加到作为散列映射值的向量?

use std::collections::HashMap;

fn main() {
let mut dict = HashMap::new();
let mut prefix = ["", ""];

let lorem = "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eum debitis earum quidem dolorem quos consequatur perspiciatis architecto! Reiciendis rem est blanditiis fugiat quidem similique suscipit soluta, ab veniam, laborum numquam. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Eum debitis earum quidem dolorem quos consequatur perspiciatis architecto! Reiciendis rem est blanditiis fugiat quidem similique suscipit soluta, ab veniam, laborum numquam.";

for token in lorem.split_whitespace() {
if prefix[0] != "" {

let key = prefix.join(" ");

if !dict.contains_key(&key) {
dict.insert(key, vec![token]);
} else {
let v = dict.get(&key);
v.push(token); // does not actually return a vector
}
}

prefix[0] = prefix[1];
prefix[1] = token;
}
}

问题是行 let v = dict.get(&key); 通常我希望能够推到向量上,但它似乎返回某种集合,这我不确定如何附加到。

最佳答案

惯用的解决方案

您问题的惯用解决方案是使用 entry ,如下图:

for token in lorem.split_whitespace() {
if prefix[0] != "" {

let key = prefix.join(" ");

match dict.entry(key) {
Entry::Vacant(e) => { e.insert(vec![token]); },
Entry::Occupied(mut e) => { e.get_mut().push(token); }
}
}

prefix[0] = prefix[1];
prefix[1] = token;
}

如果键不存在,您将获得一个空条目,您可以使用它来插入新值。如果它确实存在,您将获得一个占用的条目,您可以使用它来修改当前值。如果您想了解更多信息,请查看 documentation .

Huon 在评论中提出的替代解决方案

这个更短,一旦你掌握了正在发生的事情,对我来说似乎更好:

for token in lorem.split_whitespace() {
if prefix[0] != "" {
let key = prefix.join(" ");
dict.entry(key).or_insert(Vec::new()).push(token);
}

prefix[0] = prefix[1];
prefix[1] = token;
}

为什么你的代码不起作用

get返回 Option<&Vec<&str>> .你需要拿 Vec超出选项,但即使在那种情况下你也不能改变它,因为它是一个共享引用。您可以使用 get_mut结合 unwrap如下所示(然而,这被认为是不好的风格。你真的应该使用 entry):

for token in lorem.split_whitespace() {
if prefix[0] != "" {

let key = prefix.join(" ");

if !dict.contains_key(&key) {
dict.insert(key, vec![token]);
} else {
let v = dict.get_mut(&key).unwrap();
v.push(token);
}
}

prefix[0] = prefix[1];
prefix[1] = token;
}

关于vector - 附加到向量作为 hashmap 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33243784/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com