group_anagrams
возвращает Vec<Vec<String>>
. Одним из исправлений является сопоставление answer
вложенных Vec
s вместо вложенных массивов.
let answer = vec![
vec!["ate", "eat", "tea"],
vec!["nat", "tan"],
vec!["bat"],
];
Если вы не хотите использовать вложенные Vec
s, вы можете попробовать вместо этого использовать слайсы, так как слайсы также переместите длины времени компиляции из типов в хранилище времени выполнения.
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"],
];