Ich habe eine String
like "1 2 3 4 5"
. Wie kann ich es in eine Liste von ganzen Zahlen wie [1,2,3,4,5]
in Haskell konvertieren? Was ist, wenn die Liste "12345"
ist?
Sie können
verwenden %Vor% Hier verwenden wir words
, um "1 2 3 4 5"
auf Leerzeichen aufzuteilen, so dass wir ["1", "2", "3", "4", "5"]
erhalten. Die Funktion read
kann nun die einzelnen Strings in Ganzzahlen umwandeln. Es hat den Typ Read a => String -> a
, sodass es tatsächlich in alles in der Klasse Read
type konvertiert werden kann und das Int
enthält. Aufgrund der Typvariablen im Rückgabetyp müssen wir den obigen Typ angeben.
Für die Zeichenfolge ohne Leerzeichen müssen wir jede Char
in eine Liste mit einzelnen Elementen konvertieren. Dies kann durch Anwenden von (:"")
geschehen - ein String
ist nur eine Liste von Char
s. Anschließend wenden wir read
erneut wie zuvor an:
Im Modul Data.Char ist eine Funktion definiert digitToInt . Es nimmt ein Zeichen und gibt eine Zahl zurück, solange das Zeichen als hexadezimale Ziffer interpretiert werden kann.
Wenn Sie diese Funktion in Ihrem ersten Beispiel verwenden möchten, wo die Zahlen durch ein Leerzeichen getrennt sind, müssen Sie die Leerzeichen vermeiden. Sie können das mit einem einfachen Filter tun
%Vor%Das zweite Beispiel, bei dem die Ziffern gar nicht getrennt sind, ist noch einfacher, weil Sie keinen Filter benötigen
%Vor%Ich denke, digitToInt ist besser als read , weil es nicht vom Typ des Ausdrucks abhängt, was schwierig sein könnte (was wiederum wie ich bin fand diesen Beitrag = P). Wie auch immer, ich bin neu in Haskell, also könnte ich auch falsch liegen =).