2011년 6월 2일 목요일

Arrays

Containers

Song 목록을 SongList 객체에 저장하는 방법을 생각해보도록 하자. 루비는 크게 3가지의 객체 저장 방법을 지원한다. Array, Hash, 마지막으로 새로운 리스트 구조를 만드는 것이다.

Arrays

Array 클래스는 객체 참조를 컬렉션으로 저장한다. 각 객체 참조는 배열에서 하나의 위치를 차지하며, 이 위치는 음이 아닌 정수로 표현한다. 배열을 만들 때는 리터널을 사용하거나, 명시적으로 Array 객체를 생성하는 방법이 있다.
a = [ 3.14159, "pie", 99 ]
a.type»Array
a.length»3
a[0]»3.14159
a[1]»"pie"
a[2]»99
a[3]»nil
b = Array.new
b.type»Array
b.length»0
b[0] = "second"
b[1] = "array"
b»["second", "array"]


배열 [] 연산잘르 이용하여 위치를 지정할 수 있다. 배열 인텍스는 0부터 시작하며 배열의 위치를 음이 아닌 정수로 지정하면 해당 위치의 객체를 반환한다. 그 위치에 아무것도 없다면 nil를 반환한다.
a = [ 1, 3, 5, 7, 9 ]
a[-1]»9
a[-2]»7
a[-99]»nil


만약 음수로 위치를 지정하면 뒤에서 부터 세어 찾는다.
배열 인테스를 [start, count] 처럼 숫자 쌍으로 할수 있다. 시작점에서 count만큼의 객체를 뽑아서 새로운 배열은 만들어 반환한다.
a = [ 1, 3, 5, 7, 9 ]
a[1, 3]»[3, 5, 7]
a[3, 1]»[7]
a[-3, 2]»[5, 7]


또한 인텍스 범위를 사용할 수도 있는데, 시작 위치와 끝 위치를 점 두개 혹은 새 개로 구분하여 적어주면 된다. 점 두개는 마지막 위치를 포함하고, 세 개는 그렇지 않다.
a = [ 1, 3, 5, 7, 9 ]
a[1..3]»[3, 5, 7]
a[1...3]»[3, 5]
a[3..3]»[7]
a[-3..-1]»[5, 7, 9]


일기용인 [] 연산자에 대응되는 []= 연산자도 있다. 이 연산자를 이용해 배열의 특정 위치에 값을 대입할 수 있다.
a = [ 1, 3, 5, 7, 9 ]»[1, 3, 5, 7, 9]
a[1] = 'bat'»[1, "bat", 5, 7, 9]
a[-3] = 'cat'»[1, "bat", "cat", 7, 9]
a[3] = [ 9, 8 ]»[1, "bat", "cat", [9, 8], 9]
a[6] = 99»[1, "bat", "cat", [9, 8], 9, nil, 99]

하나의 정수 인텍스를 쓸 경우, 그 위치의 원소가 대입문의 오른쪽 편에 있는 값으로 바뀐다. 그리고 인텍스 사이에 간격이 생기면 모두 nil로 채워진다.
[]= 연산자에 쓰인 인섹스가 두개 거나 범위라면, 원래 배열의 그 위치에 있는 원소들이 대입문의 오른쪽 편에 잇는 값으로 바뀐다. 길이가 0 이라면 오른편의 값이 시작 위치 바로 앞에 삽입된다. 오른편에 배열이 오면 배열 원소를 이용해 값을 바꾼다. 왼편에서 선택된 원소의 수와 오른쪽에 제공한 원소의 수가 다른 경우에도 알아서 맞춰준다.
a = [ 1, 3, 5, 7, 9 ]»[1, 3, 5, 7, 9]
a[2, 2] = 'cat'»[1, 3, "cat", 9]
a[2, 0] = 'dog'»[1, 3, "dog", "cat", 9]
a[1, 1] = [ 9, 8, 7 ]»[1, 9, 8, 7, "dog", "cat", 9]
a[0..3] = []»["dog", "cat", 9]
a[5] = 99»["dog", "cat", 9, nil, nil, 99]

댓글 없음:

댓글 쓰기

블록체인 개요 및 오픈소스 동향

블록체인(block chain) 블록체인은 공공 거래장부이며 가상 화폐로 거래할때 발생할때 발생할 수 있는 해킹을 막는 기술. 분산 데이터베이스의 한 형태로, 지속적으로 성장하는 데이터 기록 리스트로서 분산 노드의 운영자에 의한 임의 조작이 불가...