More actions
(Repair MoniWiki formatting after migration) |
(Repair batch-0003 pages from live compare) |
||
| Line 1: | Line 1: | ||
<!-- MONIWIKI PageList(^RubyLanguage) --> | |||
* [[RubyLanguage]] | |||
* [[RubyLanguage/Class]] | |||
* [[RubyLanguage/Container]] | |||
* [[RubyLanguage/DataType]] | |||
* [[RubyLanguage/ExceptionHandling]] | |||
* [[RubyLanguage/Expression]] | |||
* [[RubyLanguage/InputOutput]] | |||
__TOC__ | __TOC__ | ||
= 컨테이너 = | = 컨테이너 = | ||
| Line 20: | Line 27: | ||
=== 생성 === | === 생성 === | ||
* 리터럴로 생성 | * 리터럴로 생성 | ||
array = | array = ["a", "b", 3, "String", [1, 2]] | ||
* 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 = | array = [a, b, 3, "String", [1, 2]] | ||
coffee = | coffee = ["아메리카노", "카페모카", "카푸치노"] | ||
array | array[0] #array 배열의 첫번째 요소인 a에 접근 | ||
p array | p array[0] #a의 값인 1 출력 | ||
coffee | coffee[2] #coffee 배열의 세번째 요소인 "카푸치노"에 접근 | ||
p coffee | p coffee[2] #"카푸치노" 출력 | ||
coffee | coffee[3] #coffee 배열의 네번째 요소에 접근하나 요소가 없으므로 nil 반환 | ||
[[FootNote('''p 메서드''' : 객체를 디버그에 적합한 형식으로 문자열화하여 출력하는 메서드로 주로 디버그 출력을 위해 사용. 디버그, 학습, ShortCoding 이외에는 사용하지 않는 것이 좋다.)]] | [[FootNote('''p 메서드''' : 객체를 디버그에 적합한 형식으로 문자열화하여 출력하는 메서드로 주로 디버그 출력을 위해 사용. 디버그, 학습, ShortCoding 이외에는 사용하지 않는 것이 좋다.)]] | ||
* 음의 첨자 | * 음의 첨자 | ||
** 음의 첨자 사용시 뒤에서부터 역순으로 요소를 가리킨다. | ** 음의 첨자 사용시 뒤에서부터 역순으로 요소를 가리킨다. | ||
** | ** | ||
a | a[-n] = a[a.length - n] | ||
array = | array = [3, "String", [1, 2]] | ||
p array | p array[-2] #"String" 출력 | ||
* 길이를 포함한 첨자 | * 길이를 포함한 첨자 | ||
** 위치와 길이를 지정하는 참조방법 | ** 위치와 길이를 지정하는 참조방법 | ||
** | ** namen, m : name 배열의 n 위치부터 최대 m개의 요소를 포함하는 새로운 배열 객체를 생성하여 반환 | ||
a, b = 1, 2 | a, b = 1, 2 | ||
array = | array = [a, b, 3, "String", [1, 2]] | ||
p array | p array[1, 2] #[2, 3] 출력 | ||
p array | p array[3, 3] #["String", [1, 2]] 출력 | ||
p array | p array[-5, 3] #[1, 2, 3] 출력 | ||
* 범위 첨자 | * 범위 첨자 | ||
** 범위 안에 포함되는 요소를 얻을 수 있다. | ** 범위 안에 포함되는 요소를 얻을 수 있다. | ||
a, b = 1, 2 | a, b = 1, 2 | ||
array = | array = [a, b, 3, "String", [1, 2]] | ||
p array | p array[0..2] #[1, 2, 3] 출력 | ||
p array | p array[0...2] #[1, 2] 출력 | ||
p array | p array[-4, 3] #[2, 3, "String"] 출력 | ||
=== 첨자대입 === | === 첨자대입 === | ||
* 첨자대입을 이용함으로써 배열의 내용을 갱신할 수 있다. | * 첨자대입을 이용함으로써 배열의 내용을 갱신할 수 있다. | ||
| Line 69: | Line 76: | ||
** 좌변의 요소개수보다 우변 식이 적은 경우 모자란 부분의 요소는 제거되고 배열의 크기가 줄어든다.(line 7) | ** 좌변의 요소개수보다 우변 식이 적은 경우 모자란 부분의 요소는 제거되고 배열의 크기가 줄어든다.(line 7) | ||
** 좌변에 지정한 요소개수보다 우변 식이 많은 경우 배열의 크기를 늘려서 대입한다.(line 9) | ** 좌변에 지정한 요소개수보다 우변 식이 많은 경우 배열의 크기를 늘려서 대입한다.(line 9) | ||
array = | array = [1, 2] | ||
array | array[0] = 3 #[3, 2] | ||
array | array[4] = 4 #[3, 2, nil, nil, 4] | ||
array | array[0, 3] = 'a', 'b', 'c' #["a", "b", "c", nil, 4] | ||
array | array[1..2] = 7, 8 #["a", 7, 8, nil, 4] | ||
array | array[0, 3] = "First" #["First", nil, 4] | ||
array | array[-2] = "2nd" #["First", "2nd", 4] | ||
array | array[0, 2] = 1, 2, 3 #[1, 2, 3, 4] | ||
=== 비교 === | === 비교 === | ||
* 배열 객체끼리는 대응하는 요소가 모두 동일할 경우에 한해서만 같다. | * 배열 객체끼리는 대응하는 요소가 모두 동일할 경우에 한해서만 같다. | ||
array1 = | array1 = [1, 2, "str"] | ||
array2 = | array2 = [1, 2, "str"] | ||
array1 == array2 #true | array1 == array2 #true | ||
array1 == | array1 == ["str", 1, 2] #false: 순서가 다르다 | ||
=== 메서드 === | === 메서드 === | ||
모든 배열은 Array 클래스의 인스턴스로, 배열은 그 자체가 객체이다. 배열은 다양한 메서드를 통해 조작할 수 있다. | 모든 배열은 Array 클래스의 인스턴스로, 배열은 그 자체가 객체이다. 배열은 다양한 메서드를 통해 조작할 수 있다. | ||
Revision as of 00:29, 27 March 2026
- RubyLanguage
- RubyLanguage/Class
- RubyLanguage/Container
- RubyLanguage/DataType
- RubyLanguage/ExceptionHandling
- RubyLanguage/Expression
- RubyLanguage/InputOutput
컨테이너
- 객체를 구조화된 방법으로 저장해둘 수 있는 추상 데이터 타입(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 반환
[[FootNote(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 클래스의 인스턴스로, 배열은 그 자체가 객체이다. 배열은 다양한 메서드를 통해 조작할 수 있다.
- 배열이 가진 메서드