2016-05-21 4 views
2

リストを複数のリストに分割したいと思っています。 私はこれがtupleに格納される必要があると仮定していますが、完全にはわかりません。Elm:リストを複数のリストに分割する

は私はグループの特定の量にそれらを分割したい8人

users = 
    ["Steve", "Sally", "Barry", "Emma", "John", "Gustav", "Ankaran", "Gilly"] 

のこのグループを持っていると言います。 たとえば、2人、3人または4人のグループ。

-- desired result 

(["Steve", "Sally", "Barry"] 
, ["Emma", "John", "Gustav"] 
, ["Ankaran", "Gilly"] 
) 

この質問のパート2は、どのようにしてさまざまな長さのタプルから結果を反復してレンダリングしますか?

この例では、tuple-map を使って遊んでいましたが、2つの値を持つタプルしか期待していないようです。

import Html exposing (..) 
import List 

data = (
    ["Steve", "Sally", "Barry"] 
    , ["Emma", "John", "Gustav"] 
    , ["Ankaran", "Gilly"] 
) 

renderLI value = 
    li [] [ text value ] 

renderUL list = 
    ul [] (List.map renderLI list) 

main = 
    div [] (map renderUL data) 

-- The following taken from zarvunk/tuple-map for examples sake 

{-| Map over the tuple with two functions, one for each 
element. 
-} 
mapEach : (a -> a') -> (b -> b') -> (a, b) -> (a', b') 
mapEach f g (a, b) = (f a, g b) 

{-| Apply the given function to both elements of the tuple. 
-} 
mapBoth : (a -> a') -> (a, a) -> (a', a') 
mapBoth f = mapEach f f 

{-| Synonym for `mapBoth`. 
-} 
map : (a -> a') -> (a, a) -> (a', a') 
map = mapBoth 

答えて

7

私は、複数のリストの中にリストを分割できるようにしたいと思います。私はこれがタプルに格納される必要があると仮定していますが、完全にはわかりません。

タプルは、持ち運べる物の数に固定されています。任意のサイズのタプルを受け入れる関数を持つことはできません。

リストのリストのような、より柔軟なものがほしいと思うようです。今、あなたは要求されたサイズのリストを含むリストの中に任意のサイズのリストを分割できる機能を持っている

import List exposing (..) 

split : Int -> List a -> List (List a) 
split i list = 
    case take i list of 
    [] -> [] 
    listHead -> listHead :: split i (drop i list) 

:あなたはこのようsplit関数を定義することができます。あなただけのリストのリストに対処する必要があるため、今のレンダリング

split 2 users == [["Steve","Sally"],["Barry","Emma"],["John","Gustav"],["Ankaran","Gilly"]] 
split 3 users == [["Steve","Sally","Barry"],["Emma","John","Gustav"],["Ankaran","Gilly"]] 

あなたのHTMLは、簡単になる:

import Html exposing (..) 
import List exposing (..) 

split : Int -> List a -> List (List a) 
split i list = 
    case take i list of 
    [] -> [] 
    listHead -> listHead :: split i (drop i list) 

users = 
    ["Steve", "Sally", "Barry", "Emma", "John", "Gustav", "Ankaran", "Gilly"] 

renderLI value = 
    li [] [ text value ] 

renderUL list = 
    ul [] (List.map renderLI list) 

main = 
    div [] (map renderUL <| split 3 users) 
+0

アメージング。ありがとうございました。 ええ、私はリストのリストが可能かどうか確信が持てませんでしたが、それは完全に意味があります。再度、感謝します –

関連する問題