对列表的相同索引项进行并行迭代 |语法问题
Parallel iteration over same index items of lists | Syntax Question
学习 Rust,我注意到的最酷的事情之一是使用解构的频率是多么直观。我目前正在处理一个涉及迭代两个列表和比较具有相同索引的元素的问题。我发现自己希望我有某种类似于
的语法
for (possible_item, possible_other_item) in (list1.iter(), list_two.iter())
{
// Do stuff with the items.
// possible_item and possible_other_item would be Option types
// In case list1 and list2 had different lengths
}
有谁知道在任何编程语言中有类似的东西吗?在 Rust 中,你可以将 HashMap 解构为 (key, value) 元组,所以我觉得这种语法是可以实现的。
您可以尝试使用 zip
组合每个集合中的元素。
pub fn main( ) {
let v1 = vec![ 1, 2, 3, 4, 5 ];
let v2 = vec![ 6, 7, 8, 9, 10 ];
for ( i1, i2 ) in v1.iter( ).zip( v2.iter( ) ) {
println!( "v1 value: {} | v2 value: {}", i1, i2 );
}
// Prints out.
// v1 value: 1 | v2 value: 6
// v1 value: 2 | v2 value: 7
// v1 value: 3 | v2 value: 8
// v1 value: 4 | v2 value: 9
// v1 value: 5 | v2 value: 10
}
请注意,如果集合不对称,它将跳过这些元素。
pub fn main( ) {
let v1 = vec![ 1, 2, 3, 4, 5 ];
let v2 = vec![ 6, 7, 8, 9, 10, 11 ];
for ( i1, i2 ) in v1.iter( ).zip( v2.iter( ) ) {
println!( "v1 value: {} | v2 value: {}", i1, i2 );
}
// Notice that it did not print 11 from the v2 vector.
// v1 value: 1 | v2 value: 6
// v1 value: 2 | v2 value: 7
// v1 value: 3 | v2 value: 8
// v1 value: 4 | v2 value: 9
// v1 value: 5 | v2 value: 10
}
学习 Rust,我注意到的最酷的事情之一是使用解构的频率是多么直观。我目前正在处理一个涉及迭代两个列表和比较具有相同索引的元素的问题。我发现自己希望我有某种类似于
的语法for (possible_item, possible_other_item) in (list1.iter(), list_two.iter())
{
// Do stuff with the items.
// possible_item and possible_other_item would be Option types
// In case list1 and list2 had different lengths
}
有谁知道在任何编程语言中有类似的东西吗?在 Rust 中,你可以将 HashMap 解构为 (key, value) 元组,所以我觉得这种语法是可以实现的。
您可以尝试使用 zip
组合每个集合中的元素。
pub fn main( ) {
let v1 = vec![ 1, 2, 3, 4, 5 ];
let v2 = vec![ 6, 7, 8, 9, 10 ];
for ( i1, i2 ) in v1.iter( ).zip( v2.iter( ) ) {
println!( "v1 value: {} | v2 value: {}", i1, i2 );
}
// Prints out.
// v1 value: 1 | v2 value: 6
// v1 value: 2 | v2 value: 7
// v1 value: 3 | v2 value: 8
// v1 value: 4 | v2 value: 9
// v1 value: 5 | v2 value: 10
}
请注意,如果集合不对称,它将跳过这些元素。
pub fn main( ) {
let v1 = vec![ 1, 2, 3, 4, 5 ];
let v2 = vec![ 6, 7, 8, 9, 10, 11 ];
for ( i1, i2 ) in v1.iter( ).zip( v2.iter( ) ) {
println!( "v1 value: {} | v2 value: {}", i1, i2 );
}
// Notice that it did not print 11 from the v2 vector.
// v1 value: 1 | v2 value: 6
// v1 value: 2 | v2 value: 7
// v1 value: 3 | v2 value: 8
// v1 value: 4 | v2 value: 9
// v1 value: 5 | v2 value: 10
}