итерация по каждому символу строки в ruby 1.8.6 (каждый символ)
Я новичок в ruby и в настоящее время пытаюсь работать с каждым символом отдельно от базовой строки в ruby. Я использую ruby 1.8.6 и хотел бы сделать что-то вроде:
"ABCDEFG".each_char do |i|
puts i
end
это приводит к неопределенному методу' each_char ' ошибка.
Я ожидал увидеть вертикальный выход:
A
B
C
D
..etc
- это each_char
метод определен только для 1.9? Я пробовал использовать равнину each
метод, но блок просто выводит всю строку в одну линию. Единственный как я понимаю, как это сделать, что довольно неудобно, это создать массив символов с самого начала:
['A','B','C','D','...'].each do|i|
puts i
end
это выводит желаемое:
A
B
C
..etc
возможно, есть способ достичь этого вывода, используя немодифицированную строку для начала?
Я думаю, что эквивалент Java:
for (int i = 0; i < aString.length(); i++){
char currentChar = aString.charAt(i);
System.out.println(currentChar);
}
4 ответа:
у меня та же проблема. Я обычно прибегаю к
String#split
:"ABCDEFG".split("").each do |i| puts i end
Я думаю, вы могли бы также реализовать себя как этот:
class String def each_char self.split("").each { |i| yield i } end end
Edit: еще одна альтернатива
String#each_byte
, доступный в Ruby 1.8.6, который возвращает значение ASCII каждого символа в строке ASCII:"ABCDEFG".each_byte do |i| puts i.chr # Fixnum#chr converts any number to the ASCII char it represents end
расширение комментария la_f0ka, esp. если вам также нужна позиция индекса в вашем коде, вы должны быть в состоянии сделать
s = 'ABCDEFG' for pos in 0...s.length puts s[pos].chr end
The
.chr
важно как Ruby возвращает код символа в этой позиции вместо подстроки из одного символа в этой позиции.