Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

<!> 미완성
  1. 해쉬는 분리한다.
  2. 전체 문맥을 가다듬는다.
  3. 현실적인 예제를 찾아본다.

Contents

배열(Array)

기본접근

배열의 생성

괄호(![!])과 컴마(,)를 이용해서 배열을 만들 수 있다. 하나의 배열에 다양한 타입의 객체를 넣을 수 있다.
ruby> ary = [1, 2, "3"]
   [1, 2, "3"]

Array 클래스를 이용해서 배열을 만들 수 있다.
ary = Array.new       # => []
Array.new(3)           # => [nil,nil,nil]
Array.new(3, true)     # => [nil,nil,nil]

블럭을 이용하면 다차원 배열, 해쉬를 원소로하는 배열도 쉽게 만들 수 있다.
# 해쉬의 배열
Array.new(4) {Hash.new}  # => [{}, {}, {}, {}]

# 2차원 배열
Array.new(3){Array.new(3)}
[[nil, nil, nil],[nil, nil, nil],[nil, nil, nil]]

배열에 접근하기

인덱스 번호를 이용해서 색인에 접근할 수 있다. 범위 접근도 가능하다.
arr = [1, 2, 3, 4, 5, 6]
arr[2]    #=> 3
arr[100]  #=> nil
arr[-3]   #=> 4
arr[2, 3] #=> [3, 4, 5]
arr[1..4] #=> [2, 3, 4, 5]
음수는 배열의 끝부터 역으로 인덱스를 참조하겠다는 의미다. 배열의 끝은 -1 이다.

at 메서드로 접근해 보자.
arr.at(3) #=> 4
at을 이용하면, 매개변수가 배열의 크기를 초과하더라도 예외를 발생하지 않는다. 배열의 크기를 초화할 경우 예외를 발생하게 하고 싶다면 fetch를 사용하면 된다.

arr=[1,2,3,4,5,6]
puts arr.fetch(100)  # `fetch': index 100 outside of array bounds: -6...6 (IndexError)

firstlast를 이용해서, 배열의 처음과 마지막에 접근할 수 있다.
arr = [1,2,3,4,5,6]
arr.first # 1
arr.last  # 6

drop매서드는 n번째까지의 원소를 drop 한 후 반환하다.
arr.drop(3)  #=> [4, 5, 6]

배열 정보 얻기

count, length, size로 배열에 있는 원소의 갯수를 알 수 있다.
browsers = ['Chrome', 'Firefox', 'Safari', 'Opera', 'IE']
browsers.length #=> 5
browsers.count #=> 5

배열이 비어있는지 확인해 보자.
browser.empty?  #=>false

원소가 배열에 포함돼 있는지 확인
browser.include?('Konqueror') #=> false

배열에 아이템 추가하기

push메서드 혹은 << 연산자를 이용해서 배열의 마지막에 원소를 추가할 수 있다.
arr = [1,2,3,4]
arr.push(5)     #=> [1,2,3,4,5]
arr << 6        #=> [1,2,3,4,5,6]

unshift로 배열의 처음에 원소를 추가할 수 있다.
arr = [1,2,3,4]
arr.unshift(0)  #=> [0,1,2,3,4]

insert로 배열의 n번 위치에 원소를 추가할 수 있다.
arr = [1,2,3,4,5]
arr.insert(3, 'apple') #=>[1,2,3,'apple',4,5]

하나 이상의 원소를 추가 할 수도 있다.
arr = [1,2,3,4,5]
arr.insert(3, 'apple', 'pear', 'orange') #=>[1,2,3,"apple","pear","orange",4,5,6]

배열에서 아이템 삭제하기

스트링과 마찬가지로 합치거나 반복(곱)할 수 있다.
ruby> ary + ["foo", "bar"]
   [1, 2, "3", "foo", "bar"]
ruby> ary * 2
   [1, 2, "3", 1, 2, "3"]

join을 이용해서 배열의 원소를 문자열로 만들 수 있고, 반대로 split을 이용해서 문자열을 배열로 만들 수도 있다.
ruby> str = ary.join(":")
   "1:2:3"
ruby> str.split(":")
   ["1", "2", "3"]

해시(Hashes)

인덱스에 숫자뿐만 아니라 스트링을 포함한 다른 객체를 사용할 수 있다는 것을 제외하면 배열과 비슷하다. 이렇게 임의의 값을 넣을 수 있는 자료구조를 해시 혹은 사전 이라고 한다. 해시와 사전에서는 인덱스 대신 를 사용한다. 키를 이용해서 원소에 접근할 수 있다.

ruby> h = {1 => 2, "2" => "4"}
   {1=>2, "2"=>"4"}
ruby> h[1]
   2
ruby> h["2"]
   "4"
ruby> h[5]
   nil
ruby> h[5] = 10    # appending an entry
   10
ruby> h
   {5=>10, 1=>2, "2"=>"4"}
ruby> h.delete 1   # deleting an entry by key
   2
ruby> h[1]
   nil
ruby> h
   {5=>10, "2"=>"4"}