2016-06-04 2 views
2

조건이 충족 될 때 레코드 목록에서 단일 레코드를 반환하려고합니다. 지금은 조건이 거짓 일 때 빈 필드가있는 레코드를 반환합니다.Elm의 레코드 목록에서 단일 레코드 반환

괜찮습니까? 더 좋은 방법이 있습니까?

xs = 
    [ { name = "Mike", id = 1 } 
    , { name = "Paul", id = 2 } 
    , { name = "Susan", id = 3 } 
    ] 


getNth id xs = 
    let 
     x = 
      List.filter (\i -> i.id == id) xs 
    in 
     case List.head x of 
      Nothing -> 
       { name = "", id = 0 } 

      Just item -> 
       item 
+0

만약 작동한다면 아마도 괜찮을까요? –

+1

질문을 올바르게 이해했는지 모르겠지만 http://package.elm-lang.org/packages/elm-lang/core/4.0.1/Maybe를 찾으십시오. – marcosh

+0

@Edvin Tenovim Yeah 작동하지만 너무 많은 일을하고 있다고 느낍니다. 그래서 내가 쉽게 빠져있는 쉽고/관용적 인 방법이 있다고 생각한 이유입니다. –

답변

4

의 핵심 List 패키지 목록에 대한 검색 기능이 없지만, 사회는 List-Extra의 하나입니다. 이 기능으로, 위의 프로그램을 작성할 수 있습니다

import List.Extra exposing (find) 

getNth n xs = 
    xs 
    |> find (.id >> (==) n) 
    |> Maybe.withDefault { id = n, name = "" } 

(가) 느릅 나무의 "값이되지 않을 수도 있습니다"처리하는 표준 방법은 Maybe 값 -이 방법을 반환하는 것입니다, getNth의 사용자가 선택할 수 있습니다 그가 찾고있는 가치를 찾을 수 없을 때 무엇을해야 하는가. 그래서 나는 마지막 줄을 빠져 나가 아주 깨끗하게 도착하는 것을 선호합니다 :

getNth n = find (.id >> (==) n) 
+0

글쎄, 나는 @marcosh'List.filter (\ i -> i.id == id) xs'에 simliar 솔루션을 찾아 갔지만, 다른 관점을 제공하기 때문에 이것을 받아 들인 대답으로 표시 할 것이다. 고맙습니다. –