2010-11-23 15 views
8

Zum Beispiel würde Ich mag "hello" in list(104, 101, 108, 108, 111) oder list("h", "e", "l", "l", "o")Wie konvertiere ich eine Zeichenfolge in eine Liste in Io?

drehen Bisher habe ich eine leere Liste erstellt haben, verwendet foreach und jedes Element in die Liste selbst angehängt, aber das ist nicht wirklich eine prägnante Art und Weise zu tun es.

+0

Sie ** wirklich ** wollen nicht wissen, was Sie durchlaufen müssen, um eine Zeichenfolge in einer Liste in der konvertieren Hel-Sprache. ;-) –

+0

lol .. wenn ich jemals eine ziemlich seriöse Programmiersprache erstelle, verspreche ich, sie Hel zu nennen :) – Jakob

+0

Off topic aber relevant für Io Fragen hier auf SO. Ich habe Ihre Tag-Änderungen rückgängig gemacht, die Sie kürzlich durchgeführt haben, weil "iolanguage" das kanonische Tag für Io ist. – draegtun

Antwort

2

Eine Möglichkeit wäre, Regex Addon zu verwenden:

#!/usr/bin/env io 

Regex 

myList := "hello" allMatchesOfRegex(".") map (at(0)) 

Aber ich bin es sicher andere sein muss (und vielleicht sogar noch besser!) Wege.


Aktualisieren - re: mein Kommentar in Frage. Es wäre schön, wenn etwas in das Sequenzobjekt eingebaut wäre. Für zB:

Sequence asList := method (
    Regex 
    self allMatchesOfRegex(".") map (at(0)) 
) 

# now its just 
myList := "hello" asList 
+0

Das ist eine kreative Lösung, aber nicht wirklich besser nein :) – Jakob

+0

Es ist besser als 'foreach' weil keine Kätzchen^h^h^h^h^h^h Variablen wurden verletzt oder getötet in seiner Konstruktion :) – draegtun

+1

Nicht viele IO-Leute herumhängen auf stackoverflow anscheinend (oder irgendwo für diese Angelegenheit). +1 für die Begeisterung :) – Jakob

5

Meine eigenen Vorschlag:

Sequence asList := method(
    result := list() 
    self foreach(x, 
    result append(x) 
) 
) 

habe es nicht leistungsmäßig getestet, aber den regulären Ausdruck zu vermeiden etwas ausmachen sollte.

+0

Ja 'foreach' wird viel leistungsfähiger sein. Es ist jedoch weniger prägnant. Hoffentlich ist eine präzise performante Lösung da draußen? – draegtun

+2

Etwas ähnliches zu diesem Ansatz wird in einem der Tests verwendet (siehe byteList): https: // github.com/stevedekorte/io/blob/Meister/libs/iovm/Tests/Korrektheit/SequenceBitTest.io – dstnbrkr

+1

Eine kleine Beschleunigung: 'Ergebnis: = list() preallocateToSize (Selbstgröße)' – Tino

3

Ein weiterer schön kurze, aber leider noch langsamer als die foreach Lösung ist:

Sequence asList := method (
    Range 0 to(self size - 1) map (v, self at(v) asCharacter) 
) 
Verwandte Themen