メインコンテンツへスキップ

Rust言語でVec<Vec<T>>のT型の各要素からVec<T>を構築する方法

··304 文字·1 分·
プログラミング Rust
著者
Admin
目次

Vec<Vec> -> Vec
#

pub fn main(){
    let v:Vec<Vec<u8>>=vec![vec![0,1,2],vec![3],vec![4,5,6,7,8],vec![]];
    let flat_v:Vec<u8>= v.into_iter().map(|inner_v| inner_v.into_iter()).flatten().collect();
    println!("{:?}", flat_v);
    // [0, 1, 2, 3, 4, 5, 6, 7, 8]
}

🔗https://rust.godbolt.org/z/f18Kv5EMT

🔗std::iter::Iterator::map
🔗std::iter::Iterator::flatten
🔗std::iter::Iterator::collect

参照を集めたい場合はiter()を使えば良い。

iter(), into_iter(), iter_mut()について
🔗https://doc.rust-lang.org/std/iter/#the-three-forms-of-iteration

おまけ
#

こんな場合にも対応できる。


struct Instance{
    // ...
    vertex_colors:Vec<(f32,f32,f32,f32)>
    // ...
}

fn x() {
    // ...
    let instances:Vec<Instances> = /* ... */;

    // ...

    let instance_vertex_colors: Vec<(f32, f32, f32, f32)> = instances
        .into_iter()
        .map(|i| i.vertex_colors.into_iter())
        .flatten()
        .collect();

    // ...
}

Related

自作ゲームの状態管理の実装について考える
··3281 文字·7 分
日記 プログラミング Rust ゲームプログラミング
Rust言語で自作ゲームを実装している際に悩んだのでまとめておきました。
Getter、Setterとは? 必要かどうか迷った場合に考えること
··1588 文字·4 分
プログラミング Rust C++
構造体やクラスのフィールドのpublicやprivateについても解説しています。
Rustでティンクル☆くるせいだーすSBXの検証用ツールを実装した
··1666 文字·4 分
プログラミング Rust ゲーム