イテレータの最初のN個の要素を取得するにはtake
を利用します。
let a = vec![0, 1, 2, 3, 4, 5];
let mut iter = a.iter().take(3);
assert_eq!(iter.next(), Some(&0));
assert_eq!(iter.next(), Some(&1));
assert_eq!(iter.next(), Some(&2));
assert_eq!(iter.next(), None);
一方、イテレータの最後のN個の要素を取得するにはどうすればよいでしょうか?
まず、標準ライブラリではrev
とtake
を組み合わせます。
let a = vec![0, 1, 2, 3, 4, 5];
let mut iter = a.iter().rev().take(3);
assert_eq!(iter.next(), Some(&5));
assert_eq!(iter.next(), Some(&4));
assert_eq!(iter.next(), Some(&3));
assert_eq!(iter.next(), None);
itertools
ライブラリが導入されている環境であればtail
を利用します。
let a = vec![0, 1, 2, 3, 4, 5];
let mut iter = a.iter().tail(3);
assert_eq!(iter.next(), Some(&3));
assert_eq!(iter.next(), Some(&4));
assert_eq!(iter.next(), Some(&5));
assert_eq!(iter.next(), None);
環境情報
- rustc 1.85.1 (4eb161250 2025-03-15)
- itertools = "0.14.0"