私はイテレータを持っていますiter
;各N番目の要素を反復するイテレータに変換することは可能ですか? iter.skip_each(n - 1)
のようなもの?各N番目の値を返すイテレータ
3
A
答えて
7
Dogbert saidとしては、itertools' step
を使用してください。
外部クレートを使用できない場合、あなたは傷ついてしまうだろう。錆の生態系は、すべてが木箱に押し込まれることを強く奨励します。リポジトリをローカルでクローンし、可能であればその方法で使用してください。
そうでない場合は、それを自分で書く:
use std::iter::Fuse;
struct Nth<I> {
n: usize,
iter: Fuse<I>,
}
impl<I> Iterator for Nth<I>
where I: Iterator
{
type Item = I::Item;
fn next(&mut self) -> Option<Self::Item> {
let mut nth = None;
for _ in 0..self.n {
nth = self.iter.next();
}
nth
}
}
trait EveryNth: Iterator + Sized {
fn every_nth(self, n: usize) -> Nth<Self> {
Nth { n: n, iter: self.fuse() }
}
}
impl<I> EveryNth for I where I: Iterator {}
fn main() {
let x = [1,2,3,4,5,6,7,8,9];
for v in x.iter().every_nth(1) { println!("{}", v) }
println!("---");
for v in x.iter().every_nth(2) { println!("{}", v) }
println!("---");
for v in x.iter().every_nth(3) { println!("{}", v) }
println!("---");
for v in x.iter().every_nth(4) { println!("{}", v) }
println!("---");
for v in x.iter().every_nth(5) { println!("{}", v) }
println!("---");
for v in x.iter().every_nth(6) { println!("{}", v) }
}
注意これはitertoolsは異なる動作です。イテレータからNのサイクルのどこにあるかを指定しなかったので、コードを作成するのが最も簡単なものを選択しました。
+0
それはかなり良い解決策です。標準的な図書館には何もないので、私は外部箱を必要としないなら、それを実装する以外の方法はないと思います。 「あなたがNの繰り返しのどこにあるのかを指定しなかったのですが、x.iter()。skip(3).every_nth(5) 'を使用するだけでしたウィンドウを少しシフトする。 – anula
関連する問題
- 1. 返り値n番目の子
- 2. Jquery n番目の子の値が各関数で返されない
- 3. エラスティックサーチのn番目のレコードを返す
- 4. ループとi番目のイテレータ
- 5. パンダのデータフレームの各n番目の行を印刷する
- 6. 各n番目のセルから範囲を作成する
- 7. n番目の「無効な親値」エラー
- 8. n番目の項目
- 9. n番目の子
- 10. リストの各項目のn番目の要素を取得する方法R
- 11. すべてのn番目のセルに最小値を返す方法
- 12. 各n番目の要素を取って並べ替える
- 13. 値をJavaScriptのn-1番目の変数に渡さずに関数のn番目の変数に渡す
- 14. 文字NのN番目の出現までのデータを返す
- 15. ファイル内のn番目の単語を返す
- 16. for-loop in R、n番目とn番目の+ 1を置き換えます。
- 17. jQueryのn番目の子
- 18. n番目の子()jqueryの
- 19. は、n番目の子
- 20. n番目の子と
- 21. :n番目の子は
- 22. n番目の子は、
- 23. テーブルと:: n番目の子
- 24. Djangoテンプレートのn番目の繰り返しを取得
- 25. Pythonでn番目(n-1)番目の項を取る方法は?
- 26. n番目の倍精度数値を取得するには
- 27. Java:文字列から各n番目の行を取得する方法
- 28. Cの辞書のN番目の位置に値を格納
- 29. イテレータを使用してマップの2番目の値を更新する方法
- 30. n番目の値ごと、またはn番目の値に最も近い一致する値をサンプリングするパンダ
'itertools'に' step'イテレータがあります:https://bluss.github.io/rust-itertools/doc/itertools/trait.Itertools.html#method.step – Dogbert
私は何かを望んでいましたが標準ライブラリ。現在Rustを使用している設定では、外部クレートを使用するのが不便です。 – anula
あなたは本当に悪い時を過すでしょう。サードパーティの箱を簡単に使用できるようにするために多大な労力が費やされています。したがって、依存関係を追加することは簡単なことではないという前提のもとで動作します。これは単なる文化的なものではなく、標準ライブラリからの省略を正当化するために積極的に使用されています。私はあなたの状況が何であるか分かりませんが、それを解決するために努力すべきです。 – delnan