。◕‿‿◕。 나는 Coder다.。◕‿‿◕。

quit20.egloos.com

포토로그 방명록


라이프로그


[Ruby 문법 강좌 : 기본지식]10. 배열 다루기!! by SiroTan。◕‿‿◕。

네 드디어 배열입니다. 
루비는 배열 다루는게 참 쉽습니다. 다른 언어를 쓰시다가 루비쪽을 보면 참 뭐지.. 하는 생각이듭니다..

배열의 생성은 다음과 같이 사용할수 있습니다.

  1. num = [1, "2", 3.14, 4, 5]
  2. lang = ["Ruby", "Python", "PHP", "Perl"]
  3. #=> 같은 설정 lang = %w(Ruby Python PHP Perl)
  4. ary = ["a1",["b1","b2"],"c1",[1,2,3]]

배열안에 숫자든 문자든 자유롭게 넣을수 있고 배열의 크기도 고정이 아니라서 자유롭게 사용할수 있습니다. 

또한 문자열 일경우에는 %w만으로 배열을 지정할수 있습니다.

새로 생성시 쓰는 인스턴스는 물론 new로 가능합니다.

■배열의 인덱스 및 조작
배열의 인덱스는 0부터 시작하던지 -1로 끝이 나던지 둘중 하나 입니다.
0부터 시작이야 늘상 쓰던 것이라 별 문제 없지만 -1은 어떤 말이냐 하면
가장 마지막 인덱스는 -1로 생각한다는 겁니다.
  1. ary = [1, 2, 3]
  2. p ary[2] #=> 3
  3. p ary[-1] #=> 3

배열의 크기를 다음처럼 자유롭게 바꿀수도 있습니다.

  1. ary = [1, 2, 3]
  2. ary[7] = 10
  3. p ary #=> [1, 2, 3, nil, nil, nil, nil, 10]

일정부분의 값의 변경이나 취득같은 경우도 다음처럼 쓸수 있습니다.

  1. ary = [1, 2, 3, 4, 5]
  2. p ary[0..2] #=> [1, 2, 3]
  3. ary[0..2] = [10, 10, 10]
  4. p ary #=> [10, 10, 10, 4, 5]

일정부분 값의 변경은 아래처럼도 가능합니다.

  1. ary = [1, 2, 3]
  2. ary[0, 2] = [10, 10, 10]
  3. p ary #=> [10, 10, 10, 3]

처음[0]부터 2자리 사이에 10을 3개넣으니 다른 언어 같은 경우 확장이 안되겠지만 루비는 그냥 넣어버립니다.

또한 기존의 배열에 추가를 할때는 [<<]를 써서 추가 합니다. 

  1. ary = %w(Ruby Python PHP Perl)
  2. ary << "Java"
  3. p ary #=> ["Ruby", "Python", "PHP", "Perl", "Java"]

■배열의 주요 메소드

크기를 알때는 size, length메소드를 사용하고

  1. ary = [1, 2, 3, 4, 5]
  2. p ary.size #=> 5
  3. p ary.length #=> 5

삭제를 할때는 delete_at을 사용합니다.

각 배열의 값을 출력할때는 each를 사용합니다. 출력시 값을 변경한다면 아래처럼 사용할수도 있습니다.

  1. ary = ["Ruby", "HTML", "JavaScript", "Rails"]
  2. ary.each { |item|
  3. output = item.downcase
  4. p output
  5. }

배열 형태로 출력을 한다면 collect를 사용할수 있습니다.

  1. ary = ["Ruby", "HTML", "JavaScript", "Rails"]
  2. p ary.collect { |item| item.upcase } #=> ["RUBY", "HTML", "JAVASCRIPT", "RAILS"]

join메소드를 사용해서 배열의 값들을 하나의 문자열로 출력하는 것도 가능합니다. 파라미터 값을 넣으면 그값으로 구분합니다.

  1. ary = ["Ruby", "on", "Rails"]
  2. p ary.join("_") #=> "Ruby_on_Rails"
unshift메소드를 사용해 배열 초기에 배열 오브젝트를 추가하는것도 가능합니다.
  1. ary = [1, 2, 3, 4, 5]
  2. ary.unshift(0)
  3. p ary #=> [0, 1, 2, 3, 4, 5]
  4.  
  5. ary = [1, 2, 3, 4, 5]
  6. ary.unshift(0, 1, 2, 3)
  7. p ary #=> [0, 1, 2, 3, 1, 2, 3, 4, 5]
push메소드를 사용하면 배열의 뒷부분에 추가를 합니다. 위에서 소개한 <<과 동일합니다.
  1. ary = [1, 2, 3, 4, 5]
  2. ary.push(6, 7, 8, 9)
  3. p ary #=> [1, 2, 3, 4, 5, 6, 7, 8, 9]

shift를 사용하면 배열의 이동이 가능합니다.

  1. ary = [1, 2, 3, 4, 5]
  2. ary.shift
  3. p ary #=> [2, 3, 4, 5]

pop을 사용하면 배열의 마지막 값을 뽑아 냅니다.

  1. ary = [1, 2, 3, 4, 5]
  2. ary.pop
  3. p ary #=> [1, 2, 3, 4]

first를 사용하면 배열 처음값을 취득합니다.

  1. ary = [1, 2, 3, 4, 5]
  2. p ary.first #=> 1
last를 사용하면 마지막 값을 취득합니다.

reverse를 사용해 배열의 순서를 바꿀수 있습니다.
  1. ary = [1, 2, 3, 4, 5]
  2. ary.reverse
  3. p ary #=> [1, 2, 3, 4, 5]
  4. ary.reverse!
  5. p ary #=> [5, 4, 3, 2, 1]

루비의 특이한 것중에 우주선연산자라는 것이 있습니다. 비교되는 결과값으로 값은 -1,0,1만 돌려줍니다.
사용법은 아래처럼 가능합니다.
  1. def comparing(args1, args2)
  2. result = args1 <=> args2
  3. if result == 1
  4. puts("왼쪽 값이 큼")
  5. end
  6. if result == -1
  7. puts("오른쪽 값이 큼")
  8. end
  9. if result == 0
  10. puts("같은 값")
  11. end
  12. end

sort는 말 그대로 정렬입니다.

  1. ary = [100, 50, 5, 10, 1]
  2. p ary.sort #=> [1, 5, 10, 50, 100]

역일경우는 reverse를 추가해서 사용하면 됩니다.

sort_by를 사용해서 특정 배열순으로 출력하는것도 가능합니다.

  1. ary = ["Ruby,012", "Rails,345", "HTML,067", "JavaScript,89", "Ada,346", "C,012"]
  2. p ary.sort_by { |i|
  3. i_split = i.split(",")
  4. [i_split[1].to_i, i_split[0]]
  5. }
  6. #=> ["C,012", "Ruby,012", "HTML,067", "JavaScript,89", "Rails,345", "Ada,346"]
  7. p ary
  8. #=> ["Ruby,012", "Rails,345", "HTML,067", "JavaScript,89", "Ada,346", "C,012"]

each_with_index를 사용해 인덱스를 포함한 각 배열값의 출력도 가능합니다.
  1. ary = ["Ruby", "HTML", "JavaScript", "Rails"]
  2. ary.each_with_index { |item, index| p item, index }

inject 메소드를 사용했을 경우는, 배열의 요소에 대해서 블록의 실행 결과를 돌려줍니다. 최초로 초기치와 배열 오브젝트의 최초의 요소를 차례차례 실행합니다.

  1. ary = [1, 2, 3]
  2. p ary.inject(10){|result, item| result + item} #=> 16


이상 기나긴 배열관련 내용을 적어 봤습니다.


덧글

  • 2014/12/20 14:58 # 삭제 답글

    여기에 그냥 모두에게 감사를 게시 정보를 많이!
  • 2014/12/28 07:00 # 삭제 답글

    감사합니다 여러분!
댓글 입력 영역



유니클로 캘린더

프로그래밍RSS

P3P Blog Parts

환율위젯입니다