pub struct Thunk<I>(/* private fields */);Expand description
惰性集合
可以进行惰性的二元逻辑运算,中间不计算、不分配内存,最后一次性迭代或收集。
通过 FlatBitSet::thunk 创建。
let s1 = FlatBitSet::<usize>::from_iter([1, 2, 3]);
let s2 = FlatBitSet::<usize>::from_iter([2, 3, 4]);
let s3 = FlatBitSet::<usize>::from_iter([3, 4, 5]);
let thunk = (s1.thunk() ^ s2.thunk()) | (s1.thunk() & s3.thunk());
assert!(thunk.clone().into_iter().eq([1, 3, 4]));
assert_eq!(thunk.collect(), FlatBitSet::<usize>::from_iter([1, 3, 4]));Implementations§
Source§impl<I, K, C> Thunk<I>
impl<I, K, C> Thunk<I>
Sourcepub fn perform_biop<O, I2>(self, other: Thunk<I2>) -> Thunk<BiOpIter<O, I, I2>>
pub fn perform_biop<O, I2>(self, other: Thunk<I2>) -> Thunk<BiOpIter<O, I, I2>>
进行惰性二元运算
请使用 Thunk::intersection 之类的方法。
也可以使用 t1 & t2 之类的运算符,作用相同,更为简洁。
Sourcepub fn collect(self) -> FlatBitSet<K, C>where
I: Clone,
pub fn collect(self) -> FlatBitSet<K, C>where
I: Clone,
转换为 FlatBitSet
会预先计算大小,最多只会分配一次。
let s1 = FlatBitSet::<usize>::from_iter([1, 2, 3]);
let s2 = FlatBitSet::<usize>::from_iter([2, 3, 4]);
let thunk = s1.thunk() ^ s2.thunk();
assert_eq!(thunk.collect(), FlatBitSet::<usize>::from_iter([1, 4]));Source§impl<I, K, C> Thunk<I>
impl<I, K, C> Thunk<I>
Sourcepub fn intersection<I2: Iterator<Item = (K, C)>>(
self,
other: Thunk<I2>,
) -> Thunk<BiOpIter<AndOp, I, I2>>
pub fn intersection<I2: Iterator<Item = (K, C)>>( self, other: Thunk<I2>, ) -> Thunk<BiOpIter<AndOp, I, I2>>
惰性计算交集
可以使用运算符 t1 & t2,作用相同,更为简洁。
let s1 = FlatBitSet::<usize>::from_iter([1, 2, 3]);
let s2 = FlatBitSet::<usize>::from_iter([2, 3, 4]);
let thunk = s1.thunk().intersection(s2.thunk());
assert!(thunk.into_iter().eq([2, 3]));可以看看返回新集合的 FlatBitSet::intersection、就地计算的 FlatBitSet::intersection_with 以及返回迭代器的 FlatBitSet::intersection_iter。
Source§impl<I, K, C> Thunk<I>
impl<I, K, C> Thunk<I>
Sourcepub fn union<I2: Iterator<Item = (K, C)>>(
self,
other: Thunk<I2>,
) -> Thunk<BiOpIter<OrOp, I, I2>>
pub fn union<I2: Iterator<Item = (K, C)>>( self, other: Thunk<I2>, ) -> Thunk<BiOpIter<OrOp, I, I2>>
惰性计算并集
可以使用运算符 t1 | t2,作用相同,更为简洁。
let s1 = FlatBitSet::<usize>::from_iter([1, 2, 3]);
let s2 = FlatBitSet::<usize>::from_iter([2, 3, 4]);
let thunk = s1.thunk().union(s2.thunk());
assert!(thunk.into_iter().eq([1, 2, 3, 4]));可以看看返回新集合的 FlatBitSet::union、就地计算的 FlatBitSet::union_with 以及返回迭代器的 FlatBitSet::union_iter。
Source§impl<I, K, C> Thunk<I>
impl<I, K, C> Thunk<I>
Sourcepub fn symmetric_difference<I2: Iterator<Item = (K, C)>>(
self,
other: Thunk<I2>,
) -> Thunk<BiOpIter<XorOp, I, I2>>
pub fn symmetric_difference<I2: Iterator<Item = (K, C)>>( self, other: Thunk<I2>, ) -> Thunk<BiOpIter<XorOp, I, I2>>
惰性计算对称差
可以使用运算符 t1 ^ t2,作用相同,更为简洁。
let s1 = FlatBitSet::<usize>::from_iter([1, 2, 3]);
let s2 = FlatBitSet::<usize>::from_iter([2, 3, 4]);
let thunk = s1.thunk().symmetric_difference(s2.thunk());
assert!(thunk.into_iter().eq([1, 4]));可以看看返回新集合的 FlatBitSet::symmetric_difference、就地计算的 FlatBitSet::symmetric_difference_with 以及返回迭代器的 FlatBitSet::symmetric_difference_iter。
Source§impl<I, K, C> Thunk<I>
impl<I, K, C> Thunk<I>
Sourcepub fn difference<I2: Iterator<Item = (K, C)>>(
self,
other: Thunk<I2>,
) -> Thunk<BiOpIter<DiffOp, I, I2>>
pub fn difference<I2: Iterator<Item = (K, C)>>( self, other: Thunk<I2>, ) -> Thunk<BiOpIter<DiffOp, I, I2>>
惰性计算差集
可以使用运算符 t1 - t2,作用相同,更为简洁。
let s1 = FlatBitSet::<usize>::from_iter([1, 2, 3]);
let s2 = FlatBitSet::<usize>::from_iter([2, 3, 4]);
let thunk = s1.thunk().difference(s2.thunk());
assert!(thunk.into_iter().eq([1]));可以看看返回新集合的 FlatBitSet::difference、就地计算的 FlatBitSet::difference_with 以及返回迭代器的 FlatBitSet::difference_iter。
Trait Implementations§
Source§impl<I, K, C> IntoIterator for Thunk<I>
impl<I, K, C> IntoIterator for Thunk<I>
Auto Trait Implementations§
impl<I> Freeze for Thunk<I>where
I: Freeze,
impl<I> RefUnwindSafe for Thunk<I>where
I: RefUnwindSafe,
impl<I> Send for Thunk<I>where
I: Send,
impl<I> Sync for Thunk<I>where
I: Sync,
impl<I> Unpin for Thunk<I>where
I: Unpin,
impl<I> UnwindSafe for Thunk<I>where
I: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more