U E D R , A S I H C RSS

Ruby Language/Container

1. 컨테이너

  • 객체를 구조화된 방법으로 저장해둘 수 있는 추상 데이터 타입(ADT)
  • 배열과 해시는
    • Ruby 프로그래밍에 있어 가장 기본적인 컨테이너 객체이다.
    • 다른 객체로의 참조를 저장하는 컨테이너이다.
  • Ruby는 iterator를 통해 컨테이너 상의 반복을 자연스럽게 표기할 수 있다.

1.1. 배열

  • 객체로의 참조를 차례대로 나열한 것.
    • 배열이 저장하고 있는 것은 객체 그 자체가 아니다.
    • 객체 자체를 변경하면 그 객체를 참조하고 있는 모든 배열요소의 값도 변화한다.
  • 요소
    • 배열이 저장하고 있는 각각의 객체 참조.
    • 배열의 요소가 동일한 자료형일 필요는 없다.
    • 요소로 배열을 포함할 수도 있다.
  • 첨자
    • 배열의 요소가 몇번째 순서인지 가리키는 번호.
    • 0부터 시작한다.

1.1.1. 생성

  • 리터럴로 생성

array = ["a", "b", 3, "String", [1, 2]]
  • Array.new로 생성

array = Array.new

1.1.2. 첨자참조

  • 첨자참조 연산자
    • [] 를 사용해 참조 위치의 객체에 접근할 수 있다.
    • 해당하는 요소가 존재하지 않는 첨자에 대해서는 nil을 반환한다.

a, b = 1, 2
array = [a, b, 3, "String", [1, 2]]
coffee = ["아메리카노", "카페모카", "카푸치노"]

array[0]    #array 배열의 첫번째 요소인 a에 접근
p array[0]  #a의 값인 1 출력 
coffee[2]   #coffee 배열의 세번째 요소인 "카푸치노"에 접근
p coffee[2] #"카푸치노" 출력
coffee[3]   #coffee 배열의 네번째 요소에 접근하나 요소가 없으므로 nil 반환
[1]
  • 음의 첨자
    • 음의 첨자 사용시 뒤에서부터 역순으로 요소를 가리킨다.
    • a[-n] = a[a.length - n]

array = [3, "String", [1, 2]]

p array[-2]  #"String" 출력
  • 길이를 포함한 첨자
    • 위치와 길이를 지정하는 참조방법
    • namen, m : name 배열의 n 위치부터 최대 m개의 요소를 포함하는 새로운 배열 객체를 생성하여 반환

a, b = 1, 2
array = [a, b, 3, "String", [1, 2]]

p array[1, 2]  #[2, 3] 출력
p array[3, 3]  #["String", [1, 2]] 출력
p array[-5, 3] #[1, 2, 3] 출력
  • 범위 첨자
    • 범위 안에 포함되는 요소를 얻을 수 있다.

a, b = 1, 2
array = [a, b, 3, "String", [1, 2]]

p array[0..2]  #[1, 2, 3] 출력
p array[0...2] #[1, 2] 출력
p array[-4, 3] #[2, 3, "String"] 출력

1.1.3. 첨자대입

  • 첨자대입을 이용함으로써 배열의 내용을 갱신할 수 있다.
    • [] 연산자에 대입문을 결합한 형태
    • 배열의 길이를 넘어서는 위치에도 대입이 가능하다.(line 4)
      • 배열은 자동확장되며 중간의 공백은 nil로 채워진다.
    • 길이를 포함한 첨자나 범위 첨자를 사용한 경우, 우변에 복수 개의 값을 취할 수 있다.(line 5, 6)
    • 좌변의 요소개수보다 우변 식이 적은 경우 모자란 부분의 요소는 제거되고 배열의 크기가 줄어든다.(line 7)
    • 좌변에 지정한 요소개수보다 우변 식이 많은 경우 배열의 크기를 늘려서 대입한다.(line 9)

array = [1, 2]

array[0] = 3                #[3, 2]
array[4] = 4                #[3, 2, nil, nil, 4]
array[0, 3] = 'a', 'b', 'c' #["a", "b", "c", nil, 4]
array[1..2] = 7, 8          #["a", 7, 8, nil, 4]
array[0, 3] = "First"       #["First", nil, 4]
array[-2] = "2nd"           #["First", "2nd", 4]
array[0, 2] = 1, 2, 3       #[1, 2, 3, 4]

1.1.4. 비교

  • 배열 객체끼리는 대응하는 요소가 모두 동일할 경우에 한해서만 같다.

array1 = [1, 2, "str"]
array2 = [1, 2, "str"]

array1 == array2         #true
array1 == ["str", 1, 2]  #false: 순서가 다르다

1.1.5. 메서드

모든 배열은 Array 클래스의 인스턴스로, 배열은 그 자체가 객체이다. 배열은 다양한 메서드를 통해 조작할 수 있다.
  • 배열이 가진 메서드

1.2. 해시


----
  • [1] '''p 메서드''' : 객체를 디버그에 적합한 형식으로 문자열화하여 출력하는 메서드로 주로 디버그 출력을 위해 사용. 디버그, 학습, ShortCoding 이외에는 사용하지 않는 것이 좋다.

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:27:56
Processing time 0.1738 sec