如何用模式匹配将Rust中[i32;6]数组拆分为三个[i32;2]子数组?
Rust将[i32;6]拆分为三个[i32;2]子数组的实现方式
你想要的那种直接通过嵌套数组模式拆分的写法,目前Rust还不支持——Rust的数组模式只能逐个匹配数组元素,无法直接将连续元素绑定为固定长度的子数组变量。不过你可以通过模式匹配解构所有元素后组合的方式实现,比手动索引更安全(长度不匹配会编译报错,而非运行时panic)。
推荐实现方式(模式匹配+组合)
let arr6 = [0, 1, 2, 3, 4, 5]; // 先解构出所有6个元素 let [a0, a1, b0, b1, c0, c1] = arr6; // 组合成三个固定长度子数组 let sub1: [i32; 2] = [a0, a1]; let sub2: [i32; 2] = [b0, b1]; let sub3: [i32; 2] = [c0, c1];
简洁的手动索引方式(注意越界风险)
如果你追求代码简洁,也可以手动索引,但要确保索引正确(你原来的sub3索引写错了,应该取第4和第5个元素):
let arr6 = [0, 1, 2, 3, 4, 5]; let sub1 = [arr6[0], arr6[1]]; let sub2 = [arr6[2], arr6[3]]; let sub3 = [arr6[4], arr6[5]]; // 修正后的正确索引
为什么你期望的写法不行?
你尝试的[sub1 @ [_; 2], sub2 @ [_; 2], sub3 @ [_; 2]]这种嵌套数组模式,Rust编译器无法识别——因为数组模式的语法要求匹配的是整个数组的元素序列,而非将连续元素打包为子数组。这种语法目前不在Rust的支持范围内。
内容的提问来源于stack exchange,提问作者BallpointBen
相关产品推荐
相关产品推荐

