检查VecDeque是否包含元素

时间:2016-02-23 16:40:29

标签: rust

拥有VecDeque deqitem,如何找出deq是否包含item?我可以使用迭代器来完成它:

deq.iter().find(|e| e == item).is_none()

但这是很多代码。我只想说deq.contains(item),但VecDeque没有这样的方法(编辑:不再是真的,请参阅my answer)。任何替代方案?

3 个答案:

答案 0 :(得分:5)

Rust 1.12LinkedListVecDeque config.before(:each) do #DatabaseCleaner.strategy = :transaction # if we use transaction the data is NOT saved during the actual rspec scenario. we must have commit # during rspec so external compare processs can access data # TODO make this conditional based on the compare plans process only # tests will not have :nontransactional defined except compareplans testing if self.class.metadata[:nontransactional] DatabaseCleaner.strategy = :truncation else DatabaseCleaner.strategy = :transaction end end config.before(:each, :js => true) do DatabaseCleaner.strategy = :truncation end config.before(:each) do DatabaseCleaner.start end config.append_after(:each) do DatabaseCleaner.clean end end 方法已稳定。因此,现在正确答案是显而易见的:

contains

答案 1 :(得分:4)

更简单的方法可能是

deq.iter().any(|e| e == item)

但似乎没有更简单的方法。

答案 2 :(得分:3)

正如Vladimir Matveev在评论中向我指出的那样,切片有一个contains方法,所以你也可以在内部切片上使用它:

let (a, b) = deq.as_slices();
a.contains(item) || b.contains(item)

正如我在另一条评论中所提到的,你可以制作一个特性,为你提供一个很好的界面:

trait Contains<T> {
    fn contains(&self, item: &T) -> bool;
}

impl<T> Contains<T> for VecDeque<T>
    where T: PartialEq
{
    fn contains(&self, item: &T) -> bool {
        let (a, b) = self.as_slices();
        a.contains(item) || b.contains(item)
    }
}