首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >锈菌属Vector<Vector<T>>

锈菌属Vector<Vector<T>>
EN

Stack Overflow用户
提问于 2020-04-02 10:50:43
回答 2查看 1.8K关注 0票数 0

我正试着往上爬,直到生锈,而且我被一种通用类型的东西卡住了。您肯定知道10.1章(泛型数据类型)中的例子。我想要创建一个同时包含i32向量和char向量的向量。但不知何故我无法让它起作用。

代码语言:javascript
复制
fn largest<T: PartialOrd + Copy>(list: &[T]) -> T {
    let mut largest = list[0];

    for &item in list.iter() {
        if item > largest {
            largest = item;
        }
    }

    largest
}

fn main() {
    let number_list = vec![34, 50, 25, 100, 65];

    let result = largest(&number_list);
    println!("The largest number is {}", result);

    let char_list = vec!['y', 'm', 'a', 'q'];

    let result = largest(&char_list);
    println!("The largest char is {}", result);
}

我现在要创建一个向量

代码语言:javascript
复制
let mut vecvec = Vec<Vec<T>>::new();
vecvec.push(number_list);
vecvec.push(char_list);

不幸的是,它不起作用。我希望你有建议。提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-02 10:58:11

首先,“它不起作用”是没有帮助的。显然“不管用”,否则你就不会寻求帮助了。

第二,提供您实际使用的代码(在操场上)要比猜测“不工作的代码”应该在哪里进行要容易得多。

第三,

让mut = Vec::new();

T需要在某个地方定义,并且需要有意义的东西。

vecvec.push(number_list);vecvec.push(char_list);

Vec<T>意味着vec的所有元素都必须具有相同的类型。这里有一个Vec<i32>和一个Vec<char>。它们不是相同的类型,也不能与相同的类型相协调,因此它们不能放在同一个向量中:锈蚀不具有普遍存在的类型擦除或Java的“根类型”,您不能仅仅说您有“向量向量”,并在运行时填充空白。

这意味着您需要某种间接的方式来“隐藏”发散点,对于您想要的每种类型的vec,都需要一个带有变体的枚举:

代码语言:javascript
复制
enum Wrapper {
    Numbers(Vec<i32>),
    Chars(Vec<char>)
}

或者你可以通过它来使用一个属性对象的特性。

票数 5
EN

Stack Overflow用户

发布于 2020-04-02 11:58:15

各位,下面是在答案的帮助下创建的代码。(万一有人想出了这样一个模糊的想法;)

代码语言:javascript
复制
fn largest<T: PartialOrd + Copy>(list: &[T]) -> T {
    let mut largest = list[0];

    for &item in list.iter() {
        if item > largest {
            largest = item;
        }
    }

    largest
}

enum Wrapper {
    Numbers(Vec<i32>),
    Chars(Vec<char>)
}


fn main() {
    let mut number_list = vec![34, 50, 25, 100, 65];

    let result = largest(&number_list);
    println!("The largest number is {}", result);

    let mut char_list = vec!['y', 'm', 'a', 'q'];

    let result = largest(&char_list);
    println!("The largest char is {}", result);

    let mut vec: Vec<Wrapper> = Vec::new();

    vec.push(Wrapper::Numbers(number_list));
    vec.push(Wrapper::Chars(char_list));

    for v in vec.iter() {
        match v {
            Wrapper::Numbers(o) =>{ println!("The largest  is {}", largest(o))},
            Wrapper::Chars(c) => println!("The largest  is {}", largest(c))
        }

    }

}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60989833

复制
相关文章

相似问题

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