2016-12-12 4 views
1

Wir haben einen String, der, wenn er mit putStr angezeigt wird, den Fahrplan für Busse erstellt.Wie transformiert man einen String in eine Liste von Tupeln?

es sieht ungefähr so ​​aus: "4 | 12 32 52 \ N 5 | 12 32 52 \ n"

Was ich arbeiten müssen, ist es in dieser Form zu ändern: [{4 [ 12 32 52]}, {5, [12 32 52]}] Ich brauche int mit zu arbeiten.

Bitte lösen Sie es nicht, geben Sie mir nur Ideen oder Funktionen, die helfen könnten.

Auch wurde uns gesagt, groupBy zu verwenden, aber für die Gruppe und groupBy erhalte ich nur ein „nicht in scope“

+0

Sowohl "group" als auch "groupBy" befinden sich im Data.List-Modul, das Sie Ihrer Importliste hinzufügen müssten. Sie können [Hoogle] (http://hoogle.haskell.org/?hoogle=groupBy) verwenden, um Funktionen anhand ihres Namens oder Typs zu suchen und festzustellen, in welchem ​​Modul sie sich befinden. Sie können auch [unlines] (https://hackage.haskell.org/package/base-4.9.0.0/docs/Prelude.html#v:lines) finden, die nützlich sind, um die Zeichenfolge in einzelne Zeilen aufzuteilen, und die 'readMany 'Funktion von [diesem Beitrag] (http://stackoverflow.com/questions/20176706/reading-ints-in-haskell/20177526#20177526) zum Extrahieren von Inten aus Ihrer Zeichenfolge. – ppb

+0

In haskell sollte deine Liste von Tupel in dieser Form sein [(4, [12, 32, 52]), (5, [12, 32, 52])] – wizzup

Antwort

0

Daniel!

Ja, Sie könnten groupBy verwenden, um Ihnen zu helfen.

Hier ist das doc: hoogle

Und hier sind zwei schöne Beispiele:

example1

example2

Also, musst du entscheiden, was in Ihrer Funktion ist (a -> a - > Bool) für die Gruppierung wie gewünscht. Sie müssen auch entscheiden, ob Sie nur ein Gruppenkriterium oder mehrere Kriterien benötigen. Wir könnten sagen, Sie haben dieses Muster "a | b \ na | b \ n", und so weiter, nun, Sie müssen entscheiden, wo "zu schneiden" für die Gruppierung sondern auch was passiert mit "a" und "b" .

Und das ist es.

Ich hoffe, ich könnte helfen.

Verwandte Themen