2016-12-22 7 views
3

2つ以上のタプルのコレクション内のソートされた要素を反復しようとしています。タプルのコレクション内のソートされた要素を反復処理する

私はVecを持っていた場合、私は呼び出すことができます

for window in my_vec.windows(2) { 
    // do something with window 
} 

しかしVec sが暗黙のうちに持っていることは本当にいいだろうこれは、ソートされていません。 Vecの代わりにBTreeSetを使用しようとしましたが、windowsを呼び出すことができないようです。

for window in tree_set.iter().windows(2) { 
    // do something with window 
} 

を呼び出そうとすると、私はエラー

no method named `windows` found for type `std::collections::btree_set::Iter<'_, Card>` in the current scope 

答えて

5

Itertoolsがtuple_windows方法を提供取得:

extern crate itertools; 

use itertools::Itertools; 
use std::collections::BTreeSet; 

fn main() { 
    let items: BTreeSet<_> = vec![1, 3, 2].into_iter().collect(); 

    for (a, b) in items.iter().tuple_windows() { 
     println!("{} < {}", a, b); 
    } 
} 

windowsが私であることをthod on スライスではなく、イテレータではなく、元のスライスのサブスライスのイテレータを返します。 A BTreeMapは、連続したデータの上に構築されていないため、おそらく同じイテレータ・インタフェースを提供できません。メモリ内ですぐ次の値にならない値が存在することになります。

関連する問題