我有一个API,它需要&[T]来表示一片要排序的东西.

我间接地对实际数据的索引进行排序,所以我只想要一个包含0..len&[usize]作为起始值.

奇怪的是(至少对我来说)我不能用任何像这样的速记语法来实现这一点:

  • (0..len)-类型不匹配[E0308]预期为&[usize],但发现为Range<usize>
  • &(0..len)-预期为&[usize],实际为&Range<usize>
  • [0..len]-类型不匹配[E0308]预期为&[usize],但发现为[Range<usize>; 1]
  • &*[0..len]-错误[E0614]:无法取消引用类型[std::ops::Range<usize>; 1]
  • &[0..len]-^预期为&usize,实际为&Range<usize>

我能想到的最好结果是:&Vec::from_iter(0..len).as_slice(),但这真的是实现这一点的最巧妙/最惯用的方式吗?难道没有一个功能片可以在没有分配的情况下实现这一点吗?

推荐答案

是的,这非常接近表达这一点的最惯用的方式.如果上下文明显需要切片,则可以将其缩短为&Vec::from_iter(0..len),因为Vec会自动取消对切片的引用.

否则,我能想到的另一种表达方式是&(0..len).collect::<Vec<_>>(),它稍微长一点,需要丑陋的涡鱼指定集合类型.

Rust相关问答推荐

在泛型 struct 的字段声明中访问关联的Conant

使用 struct 外部的属性来改变 struct 的原始方式

你是如何在铁 rust 一侧的金牛座获得应用程序版本的?

在我的Cargo 中,当我在建筑物中使用时,找不到我可以在产品包中使用的 crate .r我如何解决这个问题?

类型批注需要静态生存期

使用Py03从Rust调用Python函数时的最佳返回类型

如何在嵌套的泛型 struct 中调用泛型方法?

了解Rust';s特征对象和不同函数签名中的生存期注释

类型生命周期绑定的目的是什么?

具有多个键的 HashMap

Rust LinkedList 中的borrow 判断器错误的原因是什么?

如何使用 Bincode 在 Rust 中序列化 Enum,同时保留 Enum 判别式而不是索引?

如何基于常量在Rust中跳过一个测试

如何在 Rust 的 Hyper 异步闭包中从外部范围正确读取字符串值

如何在 Rust 中将枚举变体转换为 u8?

如何展平以下嵌套的 if let 和 if 语句?

更好的方法来模式匹配带有 Rust 的窥视孔装配说明窗口?

如何异步记忆选项中的 struct 字段

如何从 Rust 应用程序连接到 Docker 容器中的 SurrealDB?

为什么 Bevy 的 Trait 边界不满足 Rapier 物理插件?