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

文章目录

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

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

前言

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

1.1 使用枚举类型实现

这里需要在一个Vec中存放两种类型数据,ipv4和ipv6文章来源地址https://uudwc.com/A/dMEE8

// 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();
    }
}

原文地址:https://blog.csdn.net/qq_46480020/article/details/131275754

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

上一篇 2023年06月23日 00:06
下一篇 2023年06月23日 00:10