首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在内部数组长度不同的情况下编写嵌套数组?

如何在内部数组长度不同的情况下编写嵌套数组?
EN

Stack Overflow用户
提问于 2020-04-07 17:54:05
回答 1查看 570关注 0票数 3

我有一个生成字谜的函数,我想测试它,所以我有以下内容:

代码语言:javascript
复制
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);
}

我不知道如何用编译的方式编写它:

代码语言:javascript
复制
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]`

(游乐场)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-07 18:11:42

group_anagrams返回一个Vec<Vec<String>>。一个解决办法是使answer嵌套的Vec与嵌套的数组匹配。

代码语言:javascript
复制
let answer = vec![
    vec!["ate", "eat", "tea"],
    vec!["nat", "tan"],
    vec!["bat"],
];

如果您不想要嵌套的Vec,您可以尝试使用片,因为片也会将编译时长度移出类型并进入运行时存储。

代码语言:javascript
复制
let answer = [
    &["ate", "eat", "tea"][..],
    &["nat", "tan"][..],
    &["bat"][..],
];

当然,这看起来更丑。而且它仍然不能让程序的其余部分进行编译。(我将把它作为一个练习留给读者。)

原始代码无法编译,因为内部数组的长度不同,因此类型也不同:[&str; 3][&str; 2][&str; 1]。这是三种不同的类型,数组不能包含异构项。

如果内部数组恰好具有相同的长度,则原始代码将编译。如果每个数组都有三个单词,那么整个类型将是[[&str; 3]; 3]

代码语言:javascript
复制
let answer: [[&str; 3]; 3] = [
    ["ate", "eat", "tea"],
    ["nat", "tan", "x"],
    ["bat", "y", "z"],
];
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61086320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档