Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

RubyLanguage/Container: Difference between revisions

From ZeroWiki
imported>rabierre
No edit summary
(Repair transclusion html wrappers and FootNote macro v4)
 
(4 intermediate revisions by 2 users not shown)
Line 1: Line 1:
[[pagelist(^RubyLanguage)]]
<!-- MONIWIKI PageList(^RubyLanguage) -->
* [[RubyLanguage]]
* [[RubyLanguage/Class]]
* [[RubyLanguage/Container]]
* [[RubyLanguage/DataType]]
* [[RubyLanguage/ExceptionHandling]]
* [[RubyLanguage/Expression]]
* [[RubyLanguage/InputOutput]]
__TOC__
__TOC__
= 컨테이너 =
= 컨테이너 =
Line 20: Line 27:
=== 생성 ===
=== 생성 ===
* 리터럴로 생성
* 리터럴로 생성
  array = ["a", "b", 3, "String", [1, 2]]
  array = &#91;"a", "b", 3, "String", &#91;1, 2&#93;&#93;
* Array.new로 생성
* Array.new로 생성
  array = Array.new
  array = Array.new
Line 28: Line 35:
** 해당하는 요소가 존재하지 않는 첨자에 대해서는 nil을 반환한다.
** 해당하는 요소가 존재하지 않는 첨자에 대해서는 nil을 반환한다.
  a, b = 1, 2
  a, b = 1, 2
  array = [a, b, 3, "String", [1, 2]]
  array = &#91;a, b, 3, "String", &#91;1, 2&#93;&#93;
  coffee = ["아메리카노", "카페모카", "카푸치노"]
  coffee = &#91;"아메리카노", "카페모카", "카푸치노"&#93;
   
   
  array[0]   #array 배열의 첫번째 요소인 a에 접근
  array&#91;0&#93;   #array 배열의 첫번째 요소인 a에 접근
  p array[0] #a의 값인 1 출력  
  p array&#91;0&#93; #a의 값인 1 출력  
  coffee[2]   #coffee 배열의 세번째 요소인 "카푸치노"에 접근
  coffee&#91;2&#93;   #coffee 배열의 세번째 요소인 "카푸치노"에 접근
  p coffee[2] #"카푸치노" 출력
  p coffee&#91;2&#93; #"카푸치노" 출력
  coffee[3]   #coffee 배열의 네번째 요소에 접근하나 요소가 없으므로 nil 반환
  coffee&#91;3&#93;   #coffee 배열의 네번째 요소에 접근하나 요소가 없으므로 nil 반환
&#91;&#91;FootNote('''p 메서드''' : 객체를 디버그에 적합한 형식으로 문자열화하여 출력하는 메서드로 주로 디버그 출력을 위해 사용. 디버그, 학습, ShortCoding 이외에는 사용하지 않는 것이 좋다.)&#93;&#93;
''('''p 메서드''' : 객체를 디버그에 적합한 형식으로 문자열화하여 출력하는 메서드로 주로 디버그 출력을 위해 사용. 디버그, 학습, ShortCoding 이외에는 사용하지 않는 것이 좋다.)''
* 음의 첨자
* 음의 첨자
** 음의 첨자 사용시 뒤에서부터 역순으로 요소를 가리킨다.
** 음의 첨자 사용시 뒤에서부터 역순으로 요소를 가리킨다.
**  
**  
  a[-n] = a[a.length - n]
  a&#91;-n&#93; = a&#91;a.length - n&#93;
  array = [3, "String", [1, 2]]
  array = &#91;3, "String", &#91;1, 2&#93;&#93;
   
   
  p array[-2] #"String" 출력
  p array&#91;-2&#93; #"String" 출력
* 길이를 포함한 첨자
* 길이를 포함한 첨자
** 위치와 길이를 지정하는 참조방법
** 위치와 길이를 지정하는 참조방법
** name[[n, m]] : name 배열의 n 위치부터 최대 m개의 요소를 포함하는 새로운 배열 객체를 생성하여 반환
** namen, m : name 배열의 n 위치부터 최대 m개의 요소를 포함하는 새로운 배열 객체를 생성하여 반환
  a, b = 1, 2
  a, b = 1, 2
  array = [a, b, 3, "String", [1, 2]]
  array = &#91;a, b, 3, "String", &#91;1, 2&#93;&#93;
   
   
  p array[1, 2] #[2, 3] 출력
  p array&#91;1, 2&#93; #&#91;2, 3&#93; 출력
  p array[3, 3] #["String", [1, 2]] 출력
  p array&#91;3, 3&#93; #&#91;"String", &#91;1, 2&#93;&#93; 출력
  p array[-5, 3] #[1, 2, 3] 출력
  p array&#91;-5, 3&#93; #&#91;1, 2, 3&#93; 출력
* 범위 첨자
* 범위 첨자
** 범위 안에 포함되는 요소를 얻을 수 있다.
** 범위 안에 포함되는 요소를 얻을 수 있다.
  a, b = 1, 2
  a, b = 1, 2
  array = [a, b, 3, "String", [1, 2]]
  array = &#91;a, b, 3, "String", &#91;1, 2&#93;&#93;
   
   
  p array[0..2] #[1, 2, 3] 출력
  p array&#91;0..2&#93; #&#91;1, 2, 3&#93; 출력
  p array[0...2] #[1, 2] 출력
  p array&#91;0...2&#93; #&#91;1, 2&#93; 출력
  p array[-4, 3] #[2, 3, "String"] 출력
  p array&#91;-4, 3&#93; #&#91;2, 3, "String"&#93; 출력
----
* p는 루비에 존재하는 가장 짧은 이름의 함수이다. 디버깅 때 변수의 값을 적절한 형식으로 출력해준다. 디버깅 용이니 디버깅때에만 쓰도록 한다. - [[서지혜]]
=== 첨자대입 ===
=== 첨자대입 ===
* 첨자대입을 이용함으로써 배열의 내용을 갱신할 수 있다.
* 첨자대입을 이용함으로써 배열의 내용을 갱신할 수 있다.
Line 71: Line 76:
** 좌변의 요소개수보다 우변 식이 적은 경우 모자란 부분의 요소는 제거되고 배열의 크기가 줄어든다.(line 7)
** 좌변의 요소개수보다 우변 식이 적은 경우 모자란 부분의 요소는 제거되고 배열의 크기가 줄어든다.(line 7)
** 좌변에 지정한 요소개수보다 우변 식이 많은 경우 배열의 크기를 늘려서 대입한다.(line 9)
** 좌변에 지정한 요소개수보다 우변 식이 많은 경우 배열의 크기를 늘려서 대입한다.(line 9)
  array = [1, 2]
  array = &#91;1, 2&#93;
   
   
  array[0] = 3                #[3, 2]
  array&#91;0&#93; = 3                #&#91;3, 2&#93;
  array[4] = 4                #[3, 2, nil, nil, 4]
  array&#91;4&#93; = 4                #&#91;3, 2, nil, nil, 4&#93;
  array[0, 3] = 'a', 'b', 'c' #["a", "b", "c", nil, 4]
  array&#91;0, 3&#93; = 'a', 'b', 'c' #&#91;"a", "b", "c", nil, 4&#93;
  array[1..2] = 7, 8          #["a", 7, 8, nil, 4]
  array&#91;1..2&#93; = 7, 8          #&#91;"a", 7, 8, nil, 4&#93;
  array[0, 3] = "First"      #["First", nil, 4]
  array&#91;0, 3&#93; = "First"      #&#91;"First", nil, 4&#93;
  array[-2] = "2nd"          #["First", "2nd", 4]
  array&#91;-2&#93; = "2nd"          #&#91;"First", "2nd", 4&#93;
  array[0, 2] = 1, 2, 3      #[1, 2, 3, 4]
  array&#91;0, 2&#93; = 1, 2, 3      #&#91;1, 2, 3, 4&#93;
=== 비교 ===
=== 비교 ===
* 배열 객체끼리는 대응하는 요소가 모두 동일할 경우에 한해서만 같다.
* 배열 객체끼리는 대응하는 요소가 모두 동일할 경우에 한해서만 같다.
  array1 = [1, 2, "str"]
  array1 = &#91;1, 2, "str"&#93;
  array2 = [1, 2, "str"]
  array2 = &#91;1, 2, "str"&#93;
   
   
  array1 == array2        #true
  array1 == array2        #true
  array1 == ["str", 1, 2] #false: 순서가 다르다
  array1 == &#91;"str", 1, 2&#93; #false: 순서가 다르다
=== 메서드 ===
=== 메서드 ===
모든 배열은 Array 클래스의 인스턴스로, 배열은 그 자체가 객체이다. 배열은 다양한 메서드를 통해 조작할 수 있다.  
모든 배열은 Array 클래스의 인스턴스로, 배열은 그 자체가 객체이다. 배열은 다양한 메서드를 통해 조작할 수 있다.  
Line 92: Line 97:
== 해시 ==
== 해시 ==
----
----
[[FootNote]]

Latest revision as of 13:32, 27 March 2026

컨테이너

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

배열

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

생성

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

첨자참조

  • 첨자참조 연산자
    • [] 를 사용해 참조 위치의 객체에 접근할 수 있다.
    • 해당하는 요소가 존재하지 않는 첨자에 대해서는 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 반환
(p 메서드 : 객체를 디버그에 적합한 형식으로 문자열화하여 출력하는 메서드로 주로 디버그 출력을 위해 사용. 디버그, 학습, ShortCoding 이외에는 사용하지 않는 것이 좋다.)
  • 음의 첨자
    • 음의 첨자 사용시 뒤에서부터 역순으로 요소를 가리킨다.
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"] 출력

첨자대입

  • 첨자대입을 이용함으로써 배열의 내용을 갱신할 수 있다.
    • [] 연산자에 대입문을 결합한 형태
    • 배열의 길이를 넘어서는 위치에도 대입이 가능하다.(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]

비교

  • 배열 객체끼리는 대응하는 요소가 모두 동일할 경우에 한해서만 같다.
array1 = [1, 2, "str"]
array2 = [1, 2, "str"]

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

메서드

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

  • 배열이 가진 메서드

해시