本文介绍了Elixir中的懒惰列表理解?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

是否有办法使Elixir中的列表理解变得懒惰?如果没有,是否有办法将其转换为Stream?

Is there a way to make list comprehension lazy in Elixir? If not, is there a way to turn this into a Stream?

my_list = for i <- (1..1000000), j <- (1..1000000), do: {i, j}

此代码段占用了太多内存,使我的程序不堪一击.

This code snippet blows my program by taking too much memory.

我要在my_list上应用过滤器,进行映射和缩小.

I want to apply a filter, map and reduce on my_list.

推荐答案

理解是平面地图.因此,您的代码等效于:

A comprehension is a flat map. So your code is equivalent to:

Stream.flat_map 1..1000000, fn i ->
  Stream.flat_map 1..1000000, fn j ->
    [{i, j}]
  end
end

我已经为将来的Elixir版本提出了针对"和针对"的建议,但尚待对该语言进行其他一些改进.

I have proposed a "stream for" and "parallel for" for future Elixir versions, however it is pending some other improvements to the language.

这篇关于Elixir中的懒惰列表理解?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-22 20:38