iteracja nad każdym znakiem łańcucha w ruby 1.8.6 (każdy znak)
Jestem nowy w Rubim i obecnie próbuję operować na każdym znaku oddzielnie od podstawowego ciągu znaków w Rubim. Używam ruby 1.8.6 i chciałbym zrobić coś takiego:
"ABCDEFG".each_char do |i|
puts i
end
Spowoduje to błąd niezdefiniowanej metody `each_char'.
Spodziewałem się zobaczyć wyjście pionowe:
A
B
C
D
..etc
Czy metoda each_char
jest zdefiniowana tylko dla 1.9? Próbowałem użyć metody plain each
, ale blok po prostu usuwa cały łańcuch w jednej linii. / Align = "left" / , co jest raczej niewygodne, to stworzenie tablicy znaków od początku:
['A','B','C','D','...'].each do|i|
puts i
end
To wyprowadza pożądane:
A
B
C
..etc
Czy jest jakiś sposób na osiągnięcie tego wyniku przy użyciu niezmodyfikowanego ciągu znaków na początek?
Myślę, że odpowiednikiem Javy jest:
for (int i = 0; i < aString.length(); i++){
char currentChar = aString.charAt(i);
System.out.println(currentChar);
}
4 answers
Mam ten sam problem. Zwykle uciekam się do String#split
:
"ABCDEFG".split("").each do |i|
puts i
end
Wydaje mi się, że sam mógłbyś to zaimplementować w ten sposób:
class String
def each_char
self.split("").each { |i| yield i }
end
end
Edit: kolejną alternatywą jest String#each_byte
, dostępna w Ruby 1.8.6, która zwraca wartość ASCII każdego znaku w łańcuchu ASCII:
"ABCDEFG".each_byte do |i|
puts i.chr # Fixnum#chr converts any number to the ASCII char it represents
end
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-28 01:02:20
Rozszerzenie komentarza la_f0ka, esp. jeśli potrzebujesz również pozycji indeksu w swoim kodzie, powinieneś być w stanie wykonać
s = 'ABCDEFG'
for pos in 0...s.length
puts s[pos].chr
end
.chr
jest ważne, ponieważ Ruby zwraca kod znaku na tej pozycji zamiast podłańcuch jednego znaku na tej pozycji .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-05 07:33:05
W 1.8.6 jest naprawdę problem. and it ' s ok after this edition
W 1.8.6 możesz dodać to:
requre 'jcode'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-28 05:51:28
Ale teraz możesz zrobić znacznie więcej:
a = "cruel world"
a.scan(/\w+/) #=> ["cruel", "world"]
a.scan(/.../) #=> ["cru", "el ", "wor"]
a.scan(/(...)/) #=> [["cru"], ["el "], ["wor"]]
a.scan(/(..)(..)/) #=> [["cr", "ue"], ["l ", "wo"]]
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-19 11:16:17