sorting - Elixir 如何对列表理解进行排序?

标签 sorting elixir list-comprehension

我一直在努力对这个列表理解进行排序,但我不明白关于它的两个具体事情。

for x <- span(2, n), y <- span(2, n), x <= y, x * y <= n, into: [], do: x * y

它的作用是创建一个包含最多 n 个非素数的列表。现在,如果我尝试:

for x <- span(2, n), y <- span(2, n), x <= y, x * y <= n, into: [], do: x * y
  |> Enum.sort


for x <- span(2, n), y <- span(2, n), x <= y, x * y <= n, into: [], do: x * y   
  |> Enum.sort()

两种方法都会给我错误:

protocol Enumerable not implemented for 4

所以我的第一个问题是如何使用管道对推导式进行排序?

编辑::由于存在重复项而被删除,而我没有注意到它们=>

如果我尝试:

comps = for x <- span(2, n), y <- span(2, n), x <= y, x * y <= n, into: [], do: x * y
Enum.sort(comps)

列表已排序,但现在列表中显示重复项。 我的第二个问题是,如果我将理解的输出存​​储在变量中而不包含它们,为什么它会包含重复项?

这似乎是一种相当随意的交互。

最佳答案

进一步阅读后,解决方案是在管道之前将理解包含在括号中。

(for x <- span(2, n), y <- span(2, n), x <= y, x * y <= n, into: [], do: x * y)
  |> Enum.sort 

上面的代码就是解决方案。以 block 格式传递推导式时不需要括号,但内联推导式需要括号。

我通过阅读发现了这一点:Elixir: error when piping to a function the result of inline comprehension

虽然我搜索了 Elixir 理解,但在发帖之前我没有发现这个问题,因为我不知道术语“内联理解”。

关于sorting - Elixir 如何对列表理解进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39723004/

相关文章:

java - 如何让TableSorter将一行保持在固定位置?

python - 为什么这个用于对异构序列进行排序的关键类表现得很奇怪?

javascript - 将 float 作为自然数排序

c++ - 在 2dim 的情况下排序并保留索引?

laravel - Elixir Phoenix 和 Laravel Elixir 的区别

python - 在 Python 中从两个列表中查找和删除匹配项

python - list.extend 和列表理解

erlang - 监督树启动失败

elixir - 使用 ilike 在 Ecto 中搜索部分字符串

Python 使用 takewhile 将 for/while 转换为列表理解