我有一个生成字谜的函数,我想测试它,所以我有以下内容:
pub fn group_anagrams(strs: Vec<String>) -> Vec<Vec<String>> {
unimplemented!()
}
fn main() {
let words = [
"eat".to_string(),
"tea".to_string(),
"tan".to_string(),
"ate".to_string(),
"nat".to_string(),
"bat".to_string(),
]
.to_vec();
let answer = [["ate", "eat", "tea"], ["nat", "tan"], ["bat"]];
let solution = group_anagrams(words);
assert_eq!(answer, solution);
}我不知道如何用编译的方式编写它:
error[E0308]: mismatched types
--> src/main.rs:15:42
|
15 | let answer = [["ate", "eat", "tea"], ["nat", "tan"], ["bat"]];
| ^^^^^^^^^^^^^^ expected an array with a fixed size of 3 elements, found one with 2 elements
|
= note: expected type `[&str; 3]`
found array `[&str; 2]`(游乐场)
发布于 2020-04-07 18:11:42
group_anagrams返回一个Vec<Vec<String>>。一个解决办法是使answer嵌套的Vec与嵌套的数组匹配。
let answer = vec![
vec!["ate", "eat", "tea"],
vec!["nat", "tan"],
vec!["bat"],
];如果您不想要嵌套的Vec,您可以尝试使用片,因为片也会将编译时长度移出类型并进入运行时存储。
let answer = [
&["ate", "eat", "tea"][..],
&["nat", "tan"][..],
&["bat"][..],
];当然,这看起来更丑。而且它仍然不能让程序的其余部分进行编译。(我将把它作为一个练习留给读者。)
原始代码无法编译,因为内部数组的长度不同,因此类型也不同:[&str; 3]、[&str; 2]和[&str; 1]。这是三种不同的类型,数组不能包含异构项。
如果内部数组恰好具有相同的长度,则原始代码将编译。如果每个数组都有三个单词,那么整个类型将是[[&str; 3]; 3]
let answer: [[&str; 3]; 3] = [
["ate", "eat", "tea"],
["nat", "tan", "x"],
["bat", "y", "z"],
];https://stackoverflow.com/questions/61086320
复制相似问题