Mam listę, a teraz chcę n-tego elementu. W Haskellu użyłbym !!
, ale nie mogę znaleźć wariantu wiązu.Jak uzyskać pozycję listy według indeksu w wiąz?
Odpowiedz
Nie ma odpowiednika tego w Wiązu. Można oczywiście wdrożyć to samodzielnie.
(Uwaga: nie jest to funkcja "całkowita", więc tworzy wyjątek, gdy indeks znajduje się poza zakresem).
infixl 9 !!
(!!) : [a] -> Int -> a
xs !! n = head (drop n xs)
Lepszym sposobem byłoby zdefiniowanie funkcji całkowitej za pomocą typu danych Może.
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)
Elm dodano tablice w 0.12.1.
import Array
myArray = Array.fromList [1..5]
myItem = Array.get 2 myArray
Tablice są indeksowane od zera. Indeksy negatywne nie są obecnie obsługiwane (w moim przypadku).
Należy pamiętać, że myItem : Maybe Int
. Elm robi wszystko, co możliwe, aby uniknąć błędów w czasie wykonywania, tak więc dostęp poza granice zwraca wyraźną Nothing
.
Jeśli szukasz indeksu do listy, zamiast wziąć głowę i ogon, powinieneś rozważyć użycie tablicy.
Array documentationUwaga: Tablica rdzeń realizacja jest uszkodzony; zamiast tego użyj this one!
Użyłem tego:
(!!): 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
Oczywiście dostaniesz Może i trzeba rozpakować go podczas korzystania z tej funkcji. Nie ma gwarancji, że twoja lista nie będzie pusta lub że poprosisz o indeks niemożliwy do wykonania (np. 1000) - dlatego właśnie kompilator wiązów zmusza cię do uwzględnienia tego przypadku.
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. Uzyskiwanie pozycji listy według indeksu
- 2. pandy uzyskać pozycję danego indeksu w DataFrame
- 3. Umbraco uzyskać pozycję słownika według języka, jak?
- 4. Jak zdobyć elementy listy według indeksu w szablonie freemarker?
- 5. Jak usunąć element z listy w J według indeksu?
- 6. Jak wybrać pozycję listy rozwijanej według wartości programowo
- 7. Meteor blaze wybierz konkretną pozycję według indeksu tablicy
- 8. Jak posortować listę list według określonego indeksu listy wewnętrznej?
- 9. Jak uzyskać wszystkie elementy listy według instancji?
- 10. uzyskać document.styleSheets według nazwy zamiast indeksu?
- 11. uzyskać konkretną pozycję z listy krotek C#
- 12. Jak uzyskać pozycję, którą trzymałem w widoku listy
- 13. Element listy referencyjnej według indeksu w szablonie Django?
- 14. Jak przetasować listę w wiąz?
- 15. Podłoża NSIS według indeksu
- 16. Jak uzyskać pozycję kliknięcia?
- 17. Jak uzyskać pozycję okna?
- 18. Python - Wyodrębnia wiele list z listy list według indeksu
- 19. Uzyskać pozycję caret w danych wejściowych HTML?
- 20. Czy mogę uzyskać wiersz zapytania według indeksu w ColdFusion?
- 21. Jak wybrać komórkę tabeli według jej indeksu?
- 22. Usuń pozycję z listy
- 23. Słownik iteracji Pythona według indeksu
- 24. Jak uzyskać aktualną pozycję karetki?
- 25. Jak usunąć element z listy (ListField) według identyfikatora w MongoEngine?
- 26. Jak grupować elementy według indeksu? C# LINQ
- 27. Jak uzyskać pozycję elementu potomnego
- 28. Jak uzyskać właściwą pozycję elementu?
- 29. Jak grupować według listy elementów?
- 30. Usunięcie tablicy as3 według indeksu
Wystarczy dodać inną alternatywę (ostatni (wziąć listy indeksu.) -> działa tylko wtedy, gdy indeks nie jest równe 0 lub 1, ale masz pomysł –
Haskell podnosi Spośród wyjątkiem zakresu podczas korzystania (!!) poza zasięgiem.Myślę, że byłoby to użyteczne Być może, ale wydaje się dziwne, aby poprosić o element z listy i uzyskać coś typu, który nie jest typem elementów na liście (w tym przypadku jest to być może zamiast) – TheSeamau5
W nowszych wersjach Wiązu możesz zdefiniować 'get n xs = List.head (List.drop n xs)' i jest to funkcja total. "Powyższa składnia' | 'została usunięta w 0.16. – mgold