Ruby를 사용하여 한 단계로 배열을 초기화하는 방법은 무엇입니까?


105

이 방법으로 배열을 초기화합니다.

array = Array.new
array << '1' << '2' << '3'

한 단계로 할 수 있습니까? 그렇다면 어떻게?


20
새로운 한 줄 반복 밀기에만 +1. :)
Phrogz

1
약간 짧은 @Phrogz : array = Array.new << 1 << 2 << 3 )
알렉산더 Suraphel

@AlexanderSuraphel 문자열 배열 대신 Fixnum 배열을 만듭니다.
Phrogz

1
@Phrogz 나는 그것이 더 짧을 수 있다고 언급하고 싶었습니다. 으로 변경 1하면 '1'됩니다.
Alexander Suraphel

답변:


192

배열 리터럴을 사용할 수 있습니다.

array = [ '1', '2', '3' ]

범위를 사용할 수도 있습니다.

array = ('1'..'3').to_a  # parentheses are required
# or
array = *('1'..'3')      # parentheses not required, but included for clarity

공백으로 구분 된 문자열 배열의 경우 Percent String 구문을 사용할 수 있습니다 .

array = %w[ 1 2 3 ]

Array.new각 항목의 값을 결정 하기 위해 블록을 전달할 수도 있습니다.

array = Array.new(3) { |i| (i+1).to_s }

마지막으로 위의 다른 답변과 동일한 세 문자열 배열을 생성하지는 않지만 Ruby 1.8.7+에서 열거자를 사용하여 배열을 만들 수 있습니다. 예를 들면 :

array = 1.step(17,3).to_a
#=> [1, 4, 7, 10, 13, 16]

4
자세한 답변은 to_a( [*'1'..'3']) 보다 더 선호합니다 .
Michael Kohl

@MichaelKohl 동의합니다. 1.8.6에서 범위를 표시 할 수 없다는 (잘못된) 인상을 받았습니다. 추가하겠습니다, 감사합니다! 표시와 함께 합성하지 않는 한 배열 리터럴 내에 표시 할 필요가 없습니다.
Phrogz

나는 그 목적을 위해 주로 splat을 사용한다는 것을 알고 있습니다 (그것을 합성합니다). 그리고 그것은 당신이 끝내는 것을 과시하는 것을 좋아합니다.
Michael Kohl

2
또한 클래스 메서드 Array :: []를 사용할 수 있습니다. Array[ "1","2","3"] #=> ["1","2","3"](이 메서드는 배열 리터럴 생성자와 관련이 없다고 생각합니다). 최상위 Kernel # Array를 사용할 수도 있습니다 (메서드 이름은 클래스 이름처럼 보입니다)Array(1..5) #=> [1,2,3,4,5]
b1_

*는 무엇을합니까? 이에 대한 문서는 어디에서 찾을 수 있습니까?
Arnold Roa 2015

22

짧막 한 농담:

array = [] << 1 << 2 << 3   #this is for fixnums.

또는

 a = %w| 1 2 3 4 5 |

또는

 a = [*'1'..'3']

또는

 a = Array.new(3, '1')

또는

 a = Array[*'1'..'3']

8
나는 그것을 투표하지 않았지만 이것이 [1,2,3]단일 초기화 를 하는 것과 달리 세 가지 메서드를 호출하고 배열을 점진적으로 증가시키기 때문에 추측하고 있습니다 . 또한 당신은 더 많은 캐릭터입니다. 또한 OP가 문자열 배열에 대해 묻는 동안 Fixnum 배열을 만들었습니다.
Phrogz 2011

8

위의 답변과 함께 이것도 할 수 있습니다.

    =>  [*'1'.."5"]   #remember *
    => ["1", "2", "3", "4", "5"]

1
1.9에서는 다음과 같이 할 수도 있습니다 >> [*?1..?5] #=> ["1", "2", "3", "4", "5"]..
Michael Kohl 2011

7

보다 더있다 증명 여섯 가지 방법을 어떻게 그것은 :

plus_1 = 1.method(:+)
Array.new(3, &plus_1) # => [1, 2, 3]

1.method (: +)가 가능하지 않은 경우 다음을 수행 할 수도 있습니다.

plus_1 = Proc.new {|n| n + 1}
Array.new(3, &plus_1) # => [1, 2, 3]

물론,이 시나리오에서는 과잉이지만 plus_1, 정말 긴 표현 이라면 배열 생성과는 별도의 줄에 배치하는 것이 좋습니다.


3

넌 할 수있어

array = ['1', '2', '3']

다른 사람들이 언급했듯이 다음과 같이 % w 표기법으로 배열을 초기화 할 수도 있습니다.

array = %w(1 2 3)

또는

array = %w[1 2 3]

두 경우 모두 각 요소는 정수가 아닌 문자열입니다. 따라서 요소가 정수인 배열을 원하면 각 요소를 아포스트로피로 래핑하지 않아야합니다.

array_of_integers = [1, 2, 3]

또한 요소 사이에 쉼표를 넣을 필요가 없습니다 (이 % w 표기법없이 배열을 만들 때 필요함). 이 작업을 수행하면 (나는 종종 실수로 수행했습니다),

wrong_array = %w(1, 2, 3)

요소는 세 개의 문자열 ---- "1,", "2,", "3"입니다. 따라서 다음과 같이하면됩니다.

puts wrong_array

출력은 다음과 같습니다.

1,
2,
3
=>nil

우리가 여기서 원하는 것이 아닙니다.

이것이 요점을 명확히하는 데 도움이되기를 바랍니다.


2

이러한 배열을 만들려면 다음을 수행하십시오.

array = ['1', '2', '3']

2

문자열 배열이있는 경우 다음과 같이 초기화 할 수도 있습니다.

array = %w{1 2 3}

공백으로 각 요소를 분리하십시오.


1

다음 []과 같이 요소를 작성하여 한 단계로 배열을 초기화 할 수 있습니다 .

array = ['1', '2', '3']

0

%w루비 배열의 표기법으로 간단하게 할 수 있습니다 .

array = %w(1 2 3)

배열 값 1,2,3을 배열에 추가하고 출력을 다음과 같이 인쇄합니다. ["1", "2", "3"]

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