2016-08-23 50 views
1

如何在Elixir中實現double for循環?如何在Elixir中實現雙循環?

我有興趣編寫一個double for循環來比較一個naiveSort和一個quickSort實現。

然後我意識到我甚至不知道如何在elixir中編寫一個double for循環!

那麼,如何在Elixir中編寫一個double for循環?請記住,我試圖做一個naiveSort ...

+0

遞歸用於erlang/elixir而不是循環。在Elixir的Enum模塊或:lists模塊中有很多例子erlang –

+0

我把這個作爲評論,因爲我不知道答案,但是這給了我今天早上的觀點,我正在學習Elixir在工作中的一個項目,我發現在範式刷新方面的巨大轉變。 http://elixir-lang.org/getting-started/recursion.html – jaydel

+1

或者你也許可以使用理解 – JustMichael

回答

2

一個慣用的方式做這樣可能會使用列表理解:

defmodule Quick do 
    def sort([first | rest]) do 
    sort(for(n <- rest, n < first, do: n)) ++ 
    [first] ++ 
    sort(for(n <- rest, n >= first, do: n)) 
    end 

    def sort([]) do 
    [] 
    end 
end 

iex(5)> Quick.sort [5,4,3,2,1] 
[1, 2, 3, 4, 5] 

當然,快速排序使其本身相當不錯,以遞歸解決方案,因爲該算法是「排序所有比我小的項目,然後添加我,然後添加比我大的所有項目」。這在Elixir(和Erlang)中表現得非常接近。

for是一個列表理解。它建立了一個基於生成器的列表(n <- rest部分和一個過濾器(n < first部分)。

+0

似乎你的quicksort實現會遍歷數組中的每個元素兩次,這是不必要的。創建2個單獨的列表? –

+0

也快速排序在lis中間隨機選擇一個元素t,在靈丹如何做到這一點? –