在Elixir中,您可以执行以下操作:
position: relative;
iex> [1,2,3,4] -- [2,3]
[1,4]
类型是否存在类似函数?
试图实现这一点,我有:
Stream
然而这失败了,因为 def stream_subtract(enum, []), do: Enum.to_list(enum)
def stream_subtract(enum1, enum2) do
head = Stream.take(enum2, 1)
new_enum1 = Stream.drop_while(enum1, &([&1] == head))
stream_subtract(new_enum1, Stream.drop(enum2, 1))
end
是一个列表,而不是一个流。
答案 0 :(得分:4)
您需要提前收集第二个流,以便测试其中是否存在元素。以下是您如何将其收集到MapSet中,然后使用它过滤第一个流。
此外,Stream.drop_while
只会从流的开头删除。如果你想从任意位置掉落,你需要使用Stream.reject
。
# Our two streams
foo = 1..10 |> Stream.take(4)
bar = 1..10 |> Stream.drop(1) |> Stream.take(2)
# Collect the second stream into a MapSet
bar = bar |> Enum.into(MapSet.new)
# Filter the first stream and print all items:
foo = foo |> Stream.reject(fn x -> x in bar end)
for f <- foo, do: IO.inspect(f)
输出:
1
4