gpt4 book ai didi

rust - 如何从向量创建元组?

转载 作者:行者123 更新时间:2023-11-29 07:49:30 24 4
gpt4 key购买 nike

下面是一个拆分字符串并解析每个项目的示例,将其放入一个元组中,该元组的大小在编译时已知。

use std::str::FromStr;

fn main() {
let some_str = "123,321,312";
let num_pair_str = some_str.split(',').collect::<Vec<&str>>();
if num_pair_str.len() == 3 {
let num_pair: (i32, i32, i32) = (
i32::from_str(num_pair_str[0]).expect("failed to parse number"),
i32::from_str(num_pair_str[1]).expect("failed to parse number"),
i32::from_str(num_pair_str[2]).expect("failed to parse number"),
);
println!("Tuple {:?}", num_pair);
}
}

有没有办法避免重复解析数字?

这是一个示例,说明如果 Rust 支持类似 Python 的理解,它可能会是什么样子:

let num_pair: (i32, i32, i32) = (
i32::from_str(num_pair_str[i]).expect("failed to parse number")
for i in 0..3
);

是否可以以扩展向量的方式声明元组?

最佳答案

编辑:一个简单的单行解决方案:collect_tuple流行的 itertools crate。

let iter = 1..3;
let (x, y) = iter.collect_tuple().unwrap(); // yeah!

原始答案

如果你想要更好的 IDE 类型提示,宏可能不是一个完美的解决方案。这是我的尝试:

fn tuple1<T>(a: &[T]) -> (&T) { (&a[0]) }
fn tuple2<T>(a: &[T]) -> (&T, &T) { (&a[0], &a[1]) }
fn tuple3<T>(a: &[T]) -> (&T, &T, &T) { (&a[0], &a[1], &a[2]) }
fn tuple4<T>(a: &[T]) -> (&T, &T, &T, &T) { (&a[0], &a[1], &a[2], &a[3]) }
fn tuple5<T>(a: &[T]) -> (&T, &T, &T, &T, &T) { (&a[0], &a[1], &a[2], &a[3], &a[4]) }
fn tuple6<T>(a: &[T]) -> (&T, &T, &T, &T, &T, &T) { (&a[0], &a[1], &a[2], &a[3], &a[4], &a[5]) }

关于rust - 如何从向量创建元组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38863781/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com