如何在Rust中实现子序列迭代器?
Rust实现无内存分配的子序列迭代器
我想要实现一个能生成输入序列所有**子序列(subsequences)**的迭代器,示例如下:
subsequences "abc" ["","a","b","ab","c","ac","bc","abc"] subsequences [1,2] [[],[1],[2],[1,2]] subsequences [1,2,3] [[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]] subsequences [1,2,3,4] [[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3],[4],[1,4],[2,4],[1,2,4],[3,4],[1,3,4],[2,3,4],[1,2,3,4]]
Haskell有个非常简洁的实现:
subsequences :: [a] -> [[a]] subsequences xs = [] : nonEmptySubsequences xs nonEmptySubsequences :: [a] -> [[a]] nonEmptySubsequences [] = [] nonEmptySubsequences (x:xs) = [x] : foldr f [] (nonEmptySubsequences xs) where f ys r = ys : (x : ys) : r
但我无法在Rust中复现该实现。我希望它能有如下签名,以此避免不必要的内存分配,从而处理极长序列:
fn subsequences<A: Copy>(xs: &[A]) -> impl Iterator<Item=impl Iterator<Item=A>>;
恳请提供相关指导。
内容的提问来源于stack exchange,提问作者user1002430
相关产品推荐
相关产品推荐

