루비 1.8.6 (each_char)에서 문자열의 각 문자에 대해 반복


86

나는 루비를 처음 접했고 현재 루비의 기본 문자열과는 별도로 각 캐릭터에 대해 작업을 시도하고 있습니다. 루비 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);
}

1
"asfds".char.each ....
Muhammad Umer

답변:


115

나도 같은 문제를 안고있어. 나는 보통 다음에 의지한다 String#split:

"ABCDEFG".split("").each do |i|
  puts i
end

다음과 같이 직접 구현할 수도 있습니다.

class String
  def each_char
    self.split("").each { |i| yield i }
  end
end

편집 : 또 다른 대안은 String#each_byteRuby 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

유용한 팁에 감사드립니다. 잘 작동합니다. 그렇다면 each_char 메서드는 무엇에 사용됩니까? 내가 생각하는 최신 버전을 위해?
denchr

지금까지 살펴 보지 않았지만 인터넷 검색을 한 후 1.8.6 문서에 잘못 나열되었지만 1.8.7까지 사용할 수 없습니다.
Jeremy Ruten

each_char 메서드는 이전 버전을 위한 것이며 그렇지 않은 경우에는 없습니다. 아직 ruby-doc.org/core/classes/String.html#M000862에 문서화되지 않았으며 놀랍게도 each_char가 jeremy의 분할과 같은 문자열을 생성한다는 것을 알았습니다.
Martin Dorey


1

1.8.6에 정말 문제가 있습니다. 이 에디션이 끝나면 괜찮아

1.8.6에서는 다음을 추가 할 수 있습니다.

requre 'jcode'

1

하지만 이제 훨씬 더 많은 작업을 수행 할 수 있습니다.

a = "cruel world"

a.scan(/\w+/)        #=> ["cruel", "world"]

a.scan(/.../)        #=> ["cru", "el ", "wor"]

a.scan(/(...)/)      #=> [["cru"], ["el "], ["wor"]]

a.scan(/(..)(..)/)   #=> [["cr", "ue"], ["l ", "wo"]]

1
"ABCDEFG".chars.each do |char|
  puts char
end

또한

"ABCDEFG".each_char {|char| p char}

Ruby 버전> 2.5.1

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.