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]

댓글 없음:

댓글 쓰기

ETL 솔루션 환경

ETL 솔루션 환경 하둡은 대용량 데이터를 값싸고 빠르게 분석할 수 있는 길을 만들어줬다. 통계분석 엔진인 “R”역시 하둡 못지 않게 관심을 받고 있다. 빅데이터 역시 데이터라는 점을 볼때 분산처리와 분석 그 이전에 데이터 품질 등 데이...