2010-11-23 21 views
8

Örneğin, ben kendim, boş bir liste oluşturduk foreach kullanılan ve listeye her öğeyi eklenen ettik Bugüne kadar list(104, 101, 108, 108, 111) veya list("h", "e", "l", "l", "o")Bir dizeyi Io'deki bir listeye nasıl dönüştürebilirim?

içine "hello" açmak istiyorum, ama bu gerçekten yapmak için bir özlü yol değil o.

+0

hel-dil. ;-) –

+0

lol .. Eğer oldukça ciddi bir programlama dili yaratırsam, ona Hel :) – Jakob

+0

ismi yazabilirim. Yakın zamanda yaptığınız düzenlemeleri etiketledim, çünkü "iolanguage" Io için standart etiket. – draegtun

cevap

2

bir yolu Regex eklenti kullanmak olacaktır:

#!/usr/bin/env io 

Regex 

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

Ama diğer (ve belki daha da iyi!) Yolları olmalıdır eminim.


Güncelleştirme - re: söz konusu yorum. Sıra nesnesinde yerleşik bir şey olması güzel olurdu.

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

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

Bu yaratıcı bir çözüm, ama gerçekten değil daha hayır hayır :) – Jakob

+0

Onun foreach daha iyi çünkü çünkü hiçbir yavru kedi^h^h^h^h^h^h^h değişkenleri onun yapımında zarar gördü ya da öldü :) – draegtun

+1

Görünüşe göre over veya bu konuyla ilgili herhangi bir yer). Coşku için +1 :) – Jakob

5

Kendi öneri: eg için

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

o epeyce ama Regexp'i kaçınarak bir şey için hesap etmelidir test vermedim.

+0

Evet 'foreach' çok daha fazla performans gösterecek. Ancak daha az özlüdür. Umarım özlü bir performans çözümü var mı? – draegtun

+2

Bu yaklaşıma benzer bir şey, testlerden birinde kullanılır (bkz. ByteList): https: // github.com/stevedekorte/io/blob/master/libs/iovm/tests/doğruluk/SequenceBitTest.io – dstnbrkr

+1

Biraz hızlanma: 'sonuç: = liste() preallocateToSize (kendinden boyut)' – Tino

3

başka güzel özlü ama yine foreach çözümden çok maalesef yavaş şudur: ** gerçekten ** Eğer bir listeye bir dize dönüştürmek için geçmesi gerektiğini biliyorum istemiyorum

Sequence asList := method (
    Range 0 to(self size - 1) map (v, self at(v) asCharacter) 
) 
İlgili konular