루비 배열(Array)
Ruby 배열은 모든 객체의 정렬된 정수 인덱스 컬렉션입니다. 배열의 각 요소는 인덱스와 연관되어 있으며 인덱스를 통해 검색할 수 있습니다.
배열 인덱스는 C나 Java에서와 마찬가지로 0부터 시작합니다. 음수 인덱스는 배열의 끝을 기준으로 계산됩니다. 즉, -1의 인덱스는 배열의 마지막 요소를 나타내고, -2는 배열의 마지막에서 두 번째 요소를 나타내는 식입니다.
Ruby 배열은 String, Integer, Fixnum, Hash, Symbol 등과 같은 객체나 다른 Array 객체를 저장할 수 있습니다.
Ruby 배열에는 지정된 크기가 필요하지 않으며 요소가 배열에 추가되면 Ruby 배열이 자동으로 커집니다.
Creating Arrays
배열을 만들거나 초기화하는 방법에는 여러 가지가 있습니다. 한 가지 방법은 new 클래스 메소드를 사용하는 것입니다.
names = Array.new
배열을 생성하는 동안 배열의 크기를 설정할 수 있습니다.
names = Array.new(20)
배열 names의 크기 또는 길이는 20개 요소입니다. size 또는 length 메서드를 사용하여 배열의 크기를 반환할 수 있습니다.
#!/usr/bin/ruby names = Array.new(20) puts names.size # 返回 20 puts names.length # 返回 20
위 예의 출력 결과는 다음과 같습니다.
20 20
다음과 같이 배열의 각 요소에 값을 할당할 수 있습니다.
#!/usr/bin/ruby names = Array.new(4, "mac") puts "#{names}"
위 위 예제 연산의 출력 결과는 다음과 같습니다.
["mac", "mac", "mac", "mac"]
블록을 new로 사용할 수도 있으며 각 요소는 블록의 계산 결과로 채워집니다.
#!/usr/bin/ruby nums = Array.new(10) { |e| e = e * 2 } puts "#{nums}"
출력 결과 위의 예제 연산은 다음과 같습니다:
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
Array 및 또 다른 메소드인 []는 다음과 같습니다.
nums = Array.[](1, 2, 3, 4,5)
배열 생성의 또 다른 형태는 다음과 같습니다.
nums = Array[1, 2, 3, 4,5]
Ruby 코어 모듈에서는 다음과 같은 배열 메소드를 가질 수 있습니다. 범위를 사용하는 단일 매개변수 숫자 배열을 생성하는 매개변수:
#!/usr/bin/ruby digits = Array(0..9) puts "#{digits}"
위 예제의 출력은 다음과 같습니다.
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Array 내장 메서드
배열 방법. 배열 객체의 인스턴스를 생성하는 방법은 다음과 같습니다.
Array.[](...) [or] Array[...] [or] [...]
이렇게 하면 주어진 객체로 채워진 새 배열이 반환됩니다. 이제 생성된 객체를 사용하여 사용 가능한 메서드를 호출할 수 있습니다. 예:
#!/usr/bin/ruby digits = Array(0..9) num = digits.at(6) puts "#{num}"
위 예제의 출력 결과는 다음과 같습니다.
6
다음은 공용 배열 메서드입니다(array가 배열 개체라고 가정).
일련 번호 | 방법 및 설명 |
---|---|
1 | array & other_array 두 배열의 공통 요소를 중복 없이 포함하는 새 배열을 반환합니다. |
2 | array * int [또는] array * str self의 int 복사본을 연결하여 생성된 새 배열을 반환합니다. String 매개변수를 사용하면 self.join(str)과 동일합니다. |
3 | array + other_array 두 배열을 연결하여 세 번째 배열을 생성하여 생성된 새 배열을 반환합니다. |
4 | array - other_array other_array에 있는 항목이 제거된 초기 배열의 복사본인 새 배열을 반환합니다. |
5 | str <=> other_str str을 other_str과 비교하고 -1(보다 작음), 0(같음) 또는 1(보다 큼)을 반환합니다. 비교는 대소문자를 구분합니다. |
6 | array | other_array other_array를 배열에 추가하여 중복 항목을 제거하고 새 배열을 반환하세요. |
7 | array << obj 주어진 객체를 배열의 끝에 추가합니다. 표현식은 배열 자체를 반환하므로 여러 추가 항목을 함께 연결할 수 있습니다. |
8 | array <=> other_array 배열이 other_array보다 작거나 같거나 큰 경우 정수(-1, 0 또는 +1)를 반환합니다. |
9 | array == other_array 두 배열에 동일한 수의 요소가 포함되어 있고 각 요소가 다른 배열의 해당 요소와 동일한 경우(Object.==에 따라) 두 배열은 배열은 동일합니다. |
10 | array[index] [or] array[start, length] [or] array[range] [or] array.slice(index) [or] array.slice(start, length) [또는] array.slice(range) 인덱스 index에 있는 요소를 반환하거나 start에서 시작하여 최대 length 요소까지의 하위 배열 또는 range로 지정된 하위 배열을 반환합니다. 음수 인덱스는 배열 끝부터 계산됩니다(-1이 마지막 요소임). index(또는 시작 인덱스)가 범위를 벗어나면 nil을 반환합니다. |
11 | array[index] = obj [또는] array[start, length] = obj 또는 an_array 또는 nil [또는] array[range] = obj 또는 an_array 또는 nil 인덱스 index에 요소를 설정하거나, start에서 시작하여 최대 length 요소까지 하위 배열을 바꾸거나, range로 지정된 하위 배열을 바꿉니다. 인덱스가 배열의 현재 용량보다 크면 배열이 자동으로 커집니다. 음수 인덱스는 배열 끝부터 계산됩니다. length가 0이면 요소를 삽입합니다. nil이 두 번째 또는 세 번째 형태로 사용되면 해당 요소는 self에서 제거됩니다. |
12 | array.abbrev(pattern = nil) self의 문자열에 대한 명확한 약어 집합을 계산합니다. 패턴이나 문자열을 전달하는 경우 문자열이 패턴과 일치하거나 해당 문자열로 시작하는 경우만 고려됩니다. |
13 | array.assoc(obj) obj.==를 사용하여 요소가 배열이기도 한 배열을 검색하여 obj를 포함된 각 배열의 첫 번째 요소와 비교합니다. 일치하는 항목이 있으면 첫 번째 포함 배열을 반환하고, 일치하는 항목이 없으면 nil을 반환합니다. |
14 | array.at(index) 인덱스 인덱스가 있는 요소를 반환합니다. 음수 인덱스는 self 끝부터 계산됩니다. 인덱스가 범위를 벗어나면 nil을 반환합니다. |
15 | array.clear 배열에서 모든 요소를 제거합니다. |
16 | array.collect { |item| block } [또는] array.map { |item| block } self의 각 요소에 대해 한 번씩 block을 호출합니다. 블록이 반환한 값을 포함하는 새 배열을 만듭니다. |
17 | array.collect! { |item| block } [또는] array.map! { |item| block } self의 각 요소에 대해 한 번씩 호출합니다. block에서 반환된 값으로 대체됩니다. |
array.compact | 모든 nil 요소가 제거된 self의 복사본을 반환합니다. |
array.compact! | 배열에서 모든 nil 요소를 제거합니다. 변경 사항이 없으면 nil을 반환합니다. |
array.concat(other_array) | other_array의 요소를 self 에 추가합니다. |
array.delete(obj) [또는] | array.delete(obj) { block } self 에서 obj와 동일한 항목을 삭제합니다. 동등성이 발견되지 않으면 nil을 반환합니다. 동등성이 발견되지 않고 선택적 코드 block가 제공되면 block의 결과가 반환됩니다. |
array.delete_at(index) | 지정된 index 에 있는 요소를 삭제하고 해당 요소를 반환합니다. 인덱스가 범위를 벗어나면 nil을 반환합니다. |
array.delete_if { |item| block } | block 이 true인 경우 self의 각 요소를 삭제합니다. |
array.each { |item| 블록 } | self의 각 요소에 대해 한 번씩 block을 호출하여 해당 요소를 인수로 전달합니다. |
25 | array.each_index { |index| block } Array#each와 동일하지만 요소 자체 대신 요소의 index를 전달합니다. |
26 | array.empty? 배열 자체에 요소가 없으면 true를 반환합니다. |
27 | array.eql?(other) array과 other가 동일한 객체이거나 두 배열의 내용이 동일한 경우 true를 반환합니다. |
28 | array.fetch(index) [또는] array.fetch(index, default) [또는] array.fetch(index) { |index| block } 위치로 돌아가도록 시도 index 요소. 첫 번째 양식은 index가 배열 외부에 있는 경우 IndexError 예외를 발생시키고, 두 번째 양식은 default를 반환하며, 세 번째 양식은 block을 호출할 때 index에 전달된 값을 반환합니다. 음수 index는 배열 끝부터 계산됩니다. |
29 | array.fill(obj) [또는] array.fill(obj, 시작 [, 길이]) [또는] array.fill(obj, 범위) [또는] array.fill { |index| block } [or] array.fill(start [, length] ) { |index| block } [or] array.fill(range) { |index| block } 처음 세 가지 형태의 설정 self 에서 선택한 요소는 obj입니다. nil으로 시작하는 것은 0과 같습니다. nil의 길이는 self.length와 동일합니다. 마지막 세 가지 형식은 배열을 블록의 값 으로 채웁니다. block은 채워지는 각 요소의 절대 인덱스와 함께 전달됩니다. |
30 | array.first [또는] array.first(n) 배열의 첫 번째 요소 또는 첫 번째 n 요소를 반환합니다. 첫 번째 형식은 배열이 비어 있으면 nil을 반환하고 두 번째 형식은 빈 배열을 반환합니다. |
31 | array.Flatten 1차원 평면화된 배열(재귀적으로)인 새 배열을 반환합니다. |
32 | array.Flaten! Flatten array. 변경 사항이 없으면 nil을 반환합니다. (배열에는 하위 배열이 포함되어 있지 않습니다.) |
33 | array.frozen? array가 고정된 경우(또는 정렬하는 동안 일시적으로 고정된 경우) true를 반환합니다. |
34 | array.hash 배열의 해시 코드를 계산합니다. 동일한 내용을 가진 두 개의 배열은 동일한 해시 코드를 갖습니다. |
35 | array.include?(obj) self에 obj가 포함되어 있으면 true를 반환하고, 그렇지 않으면 false를 반환합니다. |
36 | array.index(obj) obj와 동일한 self에 있는 첫 번째 개체의 index를 반환합니다. 일치하는 항목이 없으면 nil을 반환합니다. |
37 | array.indexes(i1, i2, ... iN) [또는] array.indices(i1, i2, ... iN) 이 방법은 최신 버전의 Ruby에서는 더 이상 사용되지 않으므로 대신 Array#values_at를 사용하세요. |
38 | array.indices(i1, i2, ... iN) [또는] array.indexes(i1, i2, ... iN) 이 메서드는 최신 버전의 Ruby에서 더 이상 사용되지 않습니다. 이므로 Array#values_at를 사용하세요. |
39 | array.insert(index, obj...) 주어진 index 요소 앞에 주어진 값을 삽입하세요. index는 음수 값일 수 있습니다. |
40 | array.inspect 배열의 인쇄 가능한 버전을 만듭니다. |
41 | array.join(sep=$,) 배열의 각 요소를 문자열로 변환하고 sep을 사용하여 구분하여 생성된 문자열을 반환합니다. |
42 | array.last [또는] array.last(n) self의 마지막 요소를 반환합니다. 첫 번째 형식은 배열이 empty인 경우 nil을 반환합니다. |
43 | array.length 은 self의 요소 수를 반환합니다. 아마도 0일 것이다. |
44 | array.map { |item| block } [또는] array.collect { |item| block } self의 각 요소에 대해 한 번씩 block을 호출합니다. 블록이 반환한 값을 포함하는 새 배열을 만듭니다. |
45 | array.map! { |item| block } [또는] array.collect! { |item| block } array의 각 요소에 대해 한 번씩 호출하고 요소를 넣습니다. 블록이 반환한 값으로 대체됩니다. |
array.nitems | self 에 있는 nil이 아닌 요소의 수를 반환합니다. 아마도 0일 것이다. |
array.pack(aTemplateString) | aTemplateString의 지침에 따라 배열의 내용을 이진 시퀀스로 압축합니다. 명령 A, a 및 Z 뒤에는 결과 필드의 너비를 나타내는 숫자가 올 수 있습니다. 나머지 명령어에는 변환할 배열 요소의 수를 나타내는 숫자도 포함될 수 있습니다. 숫자가 별표(*)인 경우 나머지 모든 배열 요소가 변환됩니다. 모든 지시어 뒤에는 밑줄(_)이 올 수 있습니다. 이는 지정된 유형이 기본 플랫폼의 기본 크기를 사용함을 나타냅니다. 그렇지 않으면 일관된 플랫폼 독립적 크기가 사용됩니다. 템플릿 문자열에서는 공백이 무시됩니다. |
array.pop | array 에서 마지막 요소를 제거하고 해당 요소를 반환합니다. array가 비어 있으면 nil을 반환합니다. |
array.push(obj, ...) | 주어진 obj를 배열의 끝에 추가합니다. 표현식은 배열 자체를 반환하므로 여러 추가 항목을 함께 연결할 수 있습니다. |
array.rassoc(key) | ==를 사용해 요소가 배열이기도 한 배열을 검색하여 key 를 포함된 각 배열의 두 번째 요소와 비교합니다. 일치하는 항목이 있으면 첫 번째 포함 배열이 반환됩니다. |
array.reject { |item| 블록 } | block이 true가 아닌 경우 배열 항목을 포함하는 새 배열을 반환합니다. |
52 | array.reject! { |item| block } block이 true인 경우 array에서 요소를 제거하고, 변경 사항이 없으면 nil을 반환합니다. Array#delete_if와 동일합니다. |
53 | array.replace(other_array) array의 콘텐츠를 other_array의 콘텐츠로 바꾸고 필요한 경우 자르거나 확장하세요. |
54 | array.reverse 배열 요소를 역순으로 포함하는 새 배열을 반환합니다. |
55 | array.reverse! Reverse array. |
56 | array.reverse_each {|item| block } 은 Array#each와 동일하지만 array를 뒤집습니다. |
57 | array.rindex(obj) obj와 동일한 배열의 마지막 객체 인덱스를 반환합니다. 일치하는 항목이 없으면 nil을 반환합니다. |
58 | array.select {|item| block } 배열의 연속 요소를 전달하는 블록을 호출하고 블록이 true 값을 반환할 때 요소가 포함된 배열을 반환합니다. |
59 | array.shift self의 첫 번째 요소를 반환하고 제거합니다(다른 모든 요소를 한 위치 아래로 이동합니다). 배열이 비어 있으면 nil을 반환합니다. |
60 | array.size array의 길이(요소 수)를 반환합니다. 길이에 대한 별칭. |
61 | array.slice(index) [또는] array.slice(start, length) [또는] array.slice(range) [또는] array[index] [또는] array[start, 길이] [또는] 배열[범위] 인덱스 index에 있는 요소를 반환하거나, start부터 최대 length 요소까지의 하위 배열을 반환하거나, range로 지정된 하위 배열을 반환합니다. 음수 인덱스는 배열 끝부터 계산됩니다(-1이 마지막 요소임). index(또는 시작 인덱스)가 범위를 벗어나면 nil을 반환합니다. |
62 | array.slice!(색인) [또는] array.slice!(시작, 길이) [또는] array.slice!(범위) deleteindex(길이는 선택 사항) 또는 range 지정된 요소. index가 범위를 벗어난 경우 삭제된 객체, 하위 배열 또는 nil을 반환합니다. |
63 | array.sort [또는] array.sort { | a,b | block } 정렬된 배열을 반환합니다. |
64 | array.sort! [or] array.sort! { | a,b | block } 배열을 정렬하세요. |
65 | array.to_a 은 self를 반환합니다. Array의 하위 클래스에서 호출되면 수신된 인수가 Array 객체로 변환됩니다. |
66 | array.to_ary 반환. |
67 | array.to_s self.join을 반환합니다. |
68 | array.transpose self가 행과 열이 전치된 배열의 배열이라고 가정합니다. |
69 | array.uniq array의 중복 값이 제거된 새 배열을 반환합니다. |
70 | array.uniq! self에서 중복된 요소를 제거하세요. 변경 사항이 없으면(즉, 중복 항목이 발견되지 않은 경우) nil을 반환합니다. |
71 | array.unshift(obj, ...) 객체를 배열 앞에 놓고 다른 요소를 한 위치 위로 이동합니다. |
72 | array.values_at(selector,...) 주어진 selector(하나 이상)에 해당하는 self의 요소가 포함된 배열을 반환합니다. 선택기는 정수 인덱스 또는 범위일 수 있습니다. |
73 | array.zip(arg, ...) [또는] array.zip(arg, ...){ | arr | block } 모든 인수를 배열로 변환한 다음 array의 요소는 각 인수의 해당 요소와 병합됩니다. |
어레이 팩 지침
다음 표에는 Array#pack 메서드에 대한 압축 지침이 나열되어 있습니다.
명령 | 설명 |
---|---|
@ | 절대 위치로 이동합니다. |
A | ASCII 문자열(공백으로 채워짐, 개수는 너비임) |
a | ASCII 문자열(널로 채워짐, 개수는 너비임) |
B | 비트 문자열(내림차순) |
b | 비트 문자열(오름차순). |
C | 서명되지 않은 문자입니다. |
c | 문자. |
D, d | 이중 정밀도 부동 소수점 숫자, 기본 형식. |
E | 이중 정밀도 부동 소수점 수, 리틀 엔디안 바이트 순서. |
e | 단정밀도 부동 소수점 수, 리틀 엔디안 바이트 순서. |
F, f | 단정밀도 부동 소수점 숫자, 기본 형식. |
G | 이중 정밀도 부동 소수점 수, 네트워크(빅 엔디안) 바이트 순서. |
g | 단정밀도 부동 소수점 수, 네트워크(빅 엔디안) 바이트 순서. |
H | 16진수 문자열(빅 엔디안). |
h | 16진수 문자열(리틀 엔디안). |
I | 부호 없는 정수. |
i | 정수. |
L | unsigned long. |
l | 길어요. |
M | 인용문 인쇄 가능, MIME 인코딩. |
m | Base64로 인코딩된 문자열. |
N | 긴 네트워크(빅 엔디안) 바이트 순서입니다. |
n | 짧은 네트워크(빅 엔디안) 바이트 순서입니다. |
P | 은 구조(고정 길이 문자열)를 가리킵니다. |
p | 은 null로 끝나는 문자열을 가리킵니다. |
Q, q | 64자리. |
S | 부호 없는 단축어입니다. |
s | 짧습니다. |
U | UTF-8. |
u | UU로 인코딩된 문자열입니다. |
V | 긴 리틀 엔디안 바이트 순서입니다. |
v | 짧은 리틀 엔디안 바이트 순서입니다. |
w | BER 압축 정수 fnm. |
X | 한 바이트 뒤로 건너뜁니다. |
x | 널 바이트. |
Z | 은 null에 *가 추가된다는 점을 제외하면 a와 동일합니다. |
예제
다양한 데이터를 압축하려면 다음 예를 시도해 보세요.
a = [ "a", "b", "c" ] n = [ 65, 66, 67 ] puts a.pack("A3A3A3") #=> "a b c " puts a.pack("a3a3a3") #=> "aa b c abc ABC0rrreee0brrreee0rrreee0crrreee0rrreee0" puts n.pack("ccc") #=> "ABC"
위 예의 출력 결과는 다음과 같습니다.
rrreee