2010-11-23 10 views
8

例えば、私は自分自身を、空のリストを作成しforeachを使用して、リストにすべての項目を追加しましたこれまでのところlist(104, 101, 108, 108, 111)またはlist("h", "e", "l", "l", "o")文字列をIoのリストに変換するにはどうすればよいですか?

"hello"をオンにしたいのですが、それは本当に行うに簡潔な方法ではありませんそれ。

+0

こんにちは。 ;-) –

+0

笑..もし私がかなり深刻なプログラミング言語を作成したら、それをHelと名付けることを約束します:) – Jakob

+0

トピックをオフにしますが、ここではIo質問に関連します。私は 'iolanguage'がIoの標準タグであるため、あなたが最近行った編集にタグを付けてロールバックしました。 – draegtun

答えて

2

一つの方法は、正規表現のアドオンを使用することです:

#!/usr/bin/env io 

Regex 

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

をしかし、私は他の(そしておそらくより良い!)の方法が存在しなければならないと確信しています。


更新 - 私の質問に対するコメント: Sequenceオブジェクトに何かが組み込まれているといいですね。

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

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

それは創造的な解決策です良いことはありません:) – Jakob

+0

それは 'foreach'よりも優れています。なぜなら、子猫はいないからです。^ h^h^h^h^h^h^h変数は建設中に損害を受けたり殺されたりしました。 – draegtun

+1

明らかに、その問題についてはどこでも)。熱意のために+1: – Jakob

5

私自身の提案:例えばのために

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

は、それが性能面テストしていませんが、正規表現を避けることは何かを考慮する必要があります。

+0

はい 'foreach'ははるかに優れています。しかしそれはあまり簡潔ではない。うまくいけば、簡潔な演奏の解決策はありますか? – draegtun

+2

このアプローチに似た何かがテストの1つで使用されます(byteListを参照):https:// github。 – dstnbrkr

+1

少しスピードアップ: 'result:= list()preallocateToSize(self size)' – Tino

3

もううまく簡潔それでもforeachソリューションよりも、残念ながら遅くはある:あなたは**本当に**あなたがリストに文字列を変換するために通過しなければならないものを知っている必要はありません

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