Rust动态数组存放不同类型元素

文章目录

  • Rust动态数组存放不同类型元素
    • 前言
    • 1.1 使用枚举类型实现
    • 1.2 通过特征对象实现

Rust动态数组存放不同类型元素

前言

  • Vec动态数组类型,是rust的基本集合类型,他只能存放同类型的元素。
    如 vec![1, 2, 5, 18],但是如果vec![1, 28, “xwp”, ‘c’]这种就会报错。
  • 要实现存放不同类型元素,可以通过枚举类型或者特征对象来实现
  • 建议使用特征对象,因为特征对象更加灵活而且可以动态增加类型

1.1 使用枚举类型实现

这里需要在一个Vec中存放两种类型数据,ipv4和ipv6

// 1.枚举类型实现
#[derive(Debug)]
enum IpAddr {
    V4(String),
    V6(String),
}
fn main() {
    let ipadrs = vec![
        IpAddr::V4("127.0.0.1".to_string()),
        IpAddr::V6("::1".to_string()),
    ];
    for ip in ipadrs {
        show_addr(ip);
    }
}
fn show_addr(ip: IpAddr) {
    println!("{:?}", ip);
}

1.2 通过特征对象实现

// 2.通过特征对象实现
trait IpAddr {
    fn show_addr(&self);
}
struct V4(String);
impl IpAddr for V4 {
    fn show_addr(&self) {
        println!("{}", self.0);
    }
}
struct V6(String);
impl IpAddr for V6 {
    fn show_addr(&self) {
        println!("{}", self.0);
    }
}
fn main() {
    let ips: Vec<Box<dyn IpAddr>> = vec![
        Box::new(V4("127.0.0.1".to_string())),
        Box::new(V6("::1".to_string())),
    ];
    for ip in ips {
        ip.show_addr();
    }
}

你可能感兴趣的:(Rust,rust,开发语言,后端,vector)