2017-07-06 3 views
5

[MyStruct;4]の場合はFromIteratorを実装しています。ここで、MyStructは小さなコピー構造体です。私の現在の実装では、しかし、私はforループはそれができるよう慣用的であることを確認しないんだけど、これはうまく動作しますRustのイテレータからスライスを塗りつぶす最も良い方法は何ですか?

fn from_iter<I: IntoIterator<Item=MyStruct>>(iter: I) -> Self { 
    let mut retval = [Default::default();4]; 

    for (ret, src) in retval.iter_mut().zip(iter) { 
     *ret = src; 
    } 

    retval 
} 

です。おそらくこれをもっときれいに(そしておそらくより効率的に)達成できる方法、Slice::fill(iter)がありますか?

+0

普通の古い[地図](https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.map)を使うことができますか? – hellow

答えて

1

ループは正常であり、一般に非常に最適化されます。

collect()ArrayVecにすることもできます。最初にデフォルト値で配列を埋める必要はありません。

関連する問題