목록이 있는데 이제는 n 번째 항목을 원합니다. 하스켈에서 나는 !!
을 사용할 것이지만, 나는 엘름 변형을 찾을 수 없다.elm의 색인을 기준으로 목록 항목을 얻으려면 어떻게해야합니까?
18
A
답변
12
Elm에는 이에 해당하는 것이 없습니다. 물론 직접 구현할 수도 있습니다.
(참고 : 이것은 "합계"기능이 아니므로 색인이 범위를 벗어날 때 예외를 만듭니다.)
infixl 9 !!
(!!) : [a] -> Int -> a
xs !! n = head (drop n xs)
더 나은 방법은 Maybe 데이터 유형을 사용하여 전체 기능을 정의하는 것입니다.
infixl 9 !!
(!!) : [a] -> Int -> Maybe a
xs !! n =
if | n < 0 -> Nothing
| otherwise -> case (xs,n) of
([],_) -> Nothing
(x::xs,0) -> Just x
(_::xs,n) -> xs !! (n-1)
26
엘름은 0.12.1에 배열을 추가했습니다.
import Array
myArray = Array.fromList [1..5]
myItem = Array.get 2 myArray
배열의 인덱스는 0입니다. 음수 인덱스는 현재 지원되지 않습니다 (허풍, 나는 알고 있습니다).
참고 : myItem : Maybe Int
. Elm은 런타임 오류를 피할 수있는 모든 작업을 수행하므로 범위를 벗어난 액세스는 명시 적으로 Nothing
을 반환합니다.
머리와 꼬리가 아닌 목록에 색인을 추가하려는 경우 배열을 사용해야합니다.
Array documentation중요 : 코어 배열 구현이 손상되었습니다. 대신 this one을 사용하십시오!
0
나는 이것을 사용했습니다 : 물론
(!!): Int -> List a -> Maybe a
(!!) index list = -- 3 [ 1, 2, 3, 4, 5, 6 ]
if (List.length list) >= index then
List.take index list -- [ 1, 2, 3 ]
|> List.reverse -- [ 3, 2, 1 ]
|> List.head -- Just 3
else
Nothing
당신은 아마 얻을 당신은 당신이이 기능을 사용 할 때 랩을 해제해야합니다. 목록이 비어 있지 않거나 (1000과 같은) 불가능한 색인을 요구한다는 보장은 없습니다 - 그래서 elm 컴파일러가 귀하에게 해당 사례를 설명하도록합니다.
main =
let
fifthElement =
case 5 !! [1,2,3,4,255,6] of // not sure how would you use it in Haskell?! But look's nice as infix function. (inspired by @Daniël Heres)
Just a ->
a
Nothing ->
-1
in
div []
[ text <| toString fifthElement ] // 255
관련 문제
- 1. 배열의 항목 색인을 얻으려면 어떻게해야합니까?
- 2. 목록 목록에서 색인을 만들려면 어떻게해야합니까?
- 3. rich : dataTable 행의 행 색인을 얻으려면 어떻게해야합니까?
- 4. 이 배열에서 객체의 색인을 얻으려면 어떻게해야합니까?
- 5. 안드로이드 갤러리에서 보이는보기의 색인을 얻으려면 어떻게해야합니까?
- 6. C#의 입력 값을 기준으로 목록 항목을 표시하지 않으려면 어떻게해야합니까?
- 7. git 수동 항목을 얻으려면 어떻게해야합니까?
- 8. QListView에서 선택된 항목을 얻으려면 어떻게해야합니까?
- 9. 회의 목록 만 얻으려면 어떻게해야합니까?
- 10. 트위터 목록 ID를 얻으려면 어떻게해야합니까?
- 11. 목록 항목을 다른 언어로 그룹화하려면 어떻게해야합니까?
- 12. 레코드 구문이있는 항목을 기준으로 필터링 목록
- 13. 목록 상자에서 정확한 스크롤 위치를 얻으려면 어떻게해야합니까?
- 14. 목록 상자의 항목 색인을 얻는 방법
- 15. 목록 항목을 안드로이드의 목록 끝에 보내려면 어떻게해야합니까?
- 16. LinkFieldValue를 기준으로 항목을 필터링하는 SPQuery를 작성하려면 어떻게해야합니까?
- 17. Elm의 TextArea
- 18. Elm의 동시성
- 19. 특정 조건과 일치하는 목록의 항목을 얻으려면 어떻게해야합니까?
- 20. 아약스 메소드에서 클릭 된 항목을 얻으려면 어떻게해야합니까?
- 21. oracle sql에서 다음 달에 항목을 얻으려면 어떻게해야합니까?
- 22. 이전 또는 마지막 항목을 얻으려면 어떻게해야합니까?
- 23. RegEx와 실제로 일치하는 항목을 모두 얻으려면 어떻게해야합니까?
- 24. 모든 항목의 색인을 동시에 업데이트하면서 목록 항목을 이동할 수 있습니까?
- 25. Elm의 단위 테스트 작업
- 26. TCP 소켓과 연결된 인터페이스 이름/색인을 얻으려면 어떻게해야합니까?
- 27. elastic.js를 사용하여 신축성있는 검색에서 모든 색인을 얻으려면 어떻게해야합니까?
- 28. 양식 요소 배열에서 특정 삭제 된 요소의 색인을 얻으려면 어떻게해야합니까?
- 29. 범위를 기준으로 목록 인쇄
- 30. 설치된 앱 목록 Android Studio를 얻으려면 어떻게해야합니까?
그냥 다른 대안을 추가 할 수있는 (마지막() 색인 목록을 -.> 인덱스는 0 또는 1이 아닌 경우에만 작동하지만 당신은 아이디어를 얻을 사용할 때 –
하스켈 범위 부족 예외를 제기 (!) 범위를 벗어났습니다. 아마 사용하는 것이 맞을 것 같지만 목록에서 요소를 요청하고 목록에있는 요소의 형식이 아닌 형식을 얻는 것이 이상하게 보입니다 (이 경우에는) – TheSeamau5
최근 버전의 Elm에서는'get n xs = List.head (List.drop n xs)'를 정의 할 수 있으며,이 함수는 완료되었습니다. 위의'| '구문은 0.16에서 제거되었습니다. – mgold