拥有VecDeque
deq
和item
,如何找出deq
是否包含item
?我可以使用迭代器来完成它:
deq.iter().find(|e| e == item).is_none()
但这是很多代码。我只想说deq.contains(item)
,但VecDeque
没有这样的方法(编辑:不再是真的,请参阅my answer)。任何替代方案?
答案 0 :(得分:5)
在Rust 1.12中LinkedList
和VecDeque
的 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)
}
}