2个不稳定版本

0.6.4 2024年2月17日
0.5.4 2024年2月15日
0.4.3 2024年2月10日
0.3.3 2024年1月18日
0.1.0 2024年1月6日

#898 in 数据结构

Download history 1/week @ 2024-03-12 1/week @ 2024-03-26 3/week @ 2024-04-02

157 每月下载量
用于 retaker

自定义许可

12KB
288

AnyList

AnyList类似于Vec,但类型中不使用泛型。

没有泛型类型,你可以创建包含不同类型的列表。

这唯一的问题是每个函数都需要正确使用类型,因为它们都需要泛型,除了那些不需要泛型参数的实现(例如:remove,pop)。

如果使用错误类型,API将引发panic。

这样做的唯一目的是比Vec表现更好,后者通过额外的指针产生碎片化和间接引用,并且能够使用pop和remove等实现,而无需在函数中使用泛型。

由reddit上的SkiFire13实现。

示例

fn main() {
   let mut list = AnyList::new::<u32>();

   list.push::<u32>(1);
   list.insert::<u32>(1, 2);
   list.push::<u32>(3);

   assert_eq!(list.as_slice::<u32>(), &[1,2,3]);

   list.untyped_remove(0);

   assert_eq!(list.as_slice::<u32>(), &[2,3]);

   list.untyped_pop();

   assert_eq!(list.as_slice::<u32>(), &[2]);
   
   list.insert::<u32>(0, 1);
   
   for i in 0..list.len() {
     println!("{:?}", list.get::<u32>(i).unwrap())
   }

   assert_eq!(list.as_slice::<u32>(), &[1,2]);
}

无运行时依赖