English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Ruby 배열(Array)

Ruby 배열은 어떤 객체의 순서대로된 정수 인덱스 집합입니다. 배열의 각 요소는 인덱스와 관련이 있으며, 인덱스를 통해 접근할 수 있습니다.

배열의 인덱스는 0에서 시작하며, C 또는 Java와 같습니다. 음수 인덱스는 배열의 끝에서부터 계산되므로, 인덱스는 -1 배열의 마지막 요소를 나타냅니다.-2 배열의 마지막 두 번째 요소를 나타냅니다. 이와 같이 계속 합니다.

Ruby 배열은 String, Integer, Fixnum, Hash, Symbol 등의 객체를 저장할 수 있으며, 다른 Array 객체도 저장할 수 있습니다。

Ruby 배열은 크기를 지정하지 않아도 됩니다. 배열에 요소를 추가할 때 Ruby 배열은 자동으로 성장합니다。

배열 생성

배열을 생성하거나 초기화하는 방법이 여러 가지 있습니다. 하나의 방법은 다음과 같습니다: 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]

배열은 또 다른 메서드인 []를 가지고 있습니다. 다음과 같이 사용할 수 있습니다:

nums = Array.[](1, 2, 3, 4,5)

배열 생성의 또 다른 형식은 다음과 같습니다:

nums = Array[1, 2, 3, 4,5]

Ruby 핵심 모듈에서 단일 파라미터를 받는 Array 메서드가 있습니다. 이 메서드는 범위를 파라미터로 사용하여 숫자 배열을 생성합니다:

온라인 예제

#!/usr/bin/ruby
 
digits = Array(0..9)
 
puts "#{digits}"

위의 예제 실행 결과는 다음과 같습니다:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

배열 내장 메서드

Array 메서드를 호출하기 위해 Array 객체의 예제가 필요합니다. Array 객체를 생성하는 방법을 보여드립니다:

Array.[](...) [or] Array[...] [or] [...]

이렇게 하면 지정된 객체를 채운 새로운 배열을 반환합니다. 지정된 객체를 사용하여 어떤 메서드든 호출할 수 있습니다. 예를 들어:

온라인 예제

#!/usr/bin/ruby
 
digits = Array(0..9)
 
num = digits.at(6)
 
puts "#{num}"

위의 예제 실행 결과는 다음과 같습니다:

6

아래는 공통된 배열 메서드입니다. (추정) array Array 객체입니다):

순번메서드 & 설명
1array & other_array
두 배열에서 공통된 요소를 포함하는 새로운 배열을 반환합니다. 중복이 없습니다.
2array * int [or] array * int [or] array
str
3array + other_array
새로운 배열을 반환합니다. 이 배열은 self의 int 복사본을 연결하여 생성된 것입니다. String 파라미터가 있을 때는 self.join(str)과 동일합니다.
4array - other_array
새로운 배열을 반환합니다. 이 배열은 두 배열을 연결하여 세 번째 배열을 생성한 것입니다.
5새로운 배열을 반환합니다. 이 배열은 원본 배열에서 other_array에 나타나는 항목을 제거한 복사본입니다.
str <=> other_str -1str과 other_str을 비교하여 1(빠르게)、0(같음) 또는
6array | other_array
other_array를 array에 추가하여 중복을 제거하고 새로운 배열을 반환합니다.
7array << obj
지정된 객체를 배열의 마지막에 추가합니다. 이 표현은 배열 자체를 반환하므로, 여러 추가를 연속으로 할 수 있습니다.
8array <=> other_array
array가 other_array보다 작거나, 같거나, 크면 정수를 반환합니다 (-1、 0 또는 +1)
9array == other_array
두 배열이 동일한 요소 개수를 가지고, 각 요소가 다른 배열에서 일치하는 요소와 동일하다면 (Object.==에 따라), 그 두 배열은 같습니다.
10array[index] [or] array[start, length] [or]
array[range] [or] array.slice(index) [or]
array.slice(start, length) [or] array.slice(range)

반환 인덱스 index 의 요소를 반환하거나 start 부터 length 요소의 서브 배열을 반환하거나 range 지정된 서브 배열을 반환합니다. 음수 인덱스는 배열의 끝에서 시작하여 계산됩니다(-1 마지막 요소입니다). 만약 index(또는 시작 인덱스)범위를 벗어났을 경우, 반환 nil
11array[index] = obj [or]
array[start, length] = obj or an_array or nil [or]
array[range] = obj or an_array or nil

를 설정합니다. index 의 요소를 추가하거나, start 부터 length 요소의 서브 배열을 추가하거나, range 지정된 서브 배열입니다. 인덱스가 배열의 현재 용량을 초과하면 배열이 자동으로 증가합니다. 음수 인덱스는 배열의 마지막 부분에서 시작하여 계산됩니다. 인덱스가 length 로 설정된다면. 두 번째나 세 번째 형식에서 nil그렇다면 self 요소를 제거합니다.
12array.abbrev(pattern = nil)
self 의 문자열 계산이 명확한 축약 집합입니다. 패턴이나 문자열을 전달할 때, 문자열이 패턴과 일치하거나 해당 문자열로 시작할 때만 고려합니다.
13array.assoc(obj)
검색하며, obj.==을 사용하여 obj를 각 포함된 배열의 첫 번째 요소와 비교합니다. 일치하면 첫 번째 포함된 배열을 반환하며, 일치하지 않으면 반환합니다. nil
14array.at(index)
을 반환합니다. 음수 인덱스는 self 의 끝에서 시작하여 계산합니다. 인덱스가 범위를 벗어나면 nil을 반환
15array.clear
배열에서 모든 요소를 제거합니다.
16array.collect { |item| block } [or]
array.map { |item| block }

self 의 각 요소에 대해 한 번 호출됩니다. block。创建一个新的数组,包含 block 返回的值。
17array.collect! { |item| block } [or]
array.map! { |item| block }

self 의 각 요소에 대해 한 번 호출됩니다. block으로 요소를 대체합니다. block 에서 반환된 값을 제거합니다.
18array.compact
반환 self 의 복사본을 반환하며, 모든 nil 요소를 제거합니다.
19array.compact!
배열에서 모든 nil 변화가 없으면 반환 nil
20요소.
array.concat(other_array) self other_array의 요소를 array에 추가합니다.
21에서.
array.delete(obj) [or]

에서 self array.delete(obj) { block } obj 에서 동일한 항목을 제거합니다. nil입니다. 같은 항목을 찾지 못하고 선택적인 코드가 주어지면 block이면 block 결과를 반환합니다.
22array.delete_at(index)
지정된 index 위의 요소를 제거하고 해당 요소를 반환합니다. index가 범위를 벗어나면 반환 nil
23array.delete_if { |item| block }
하면 block 이 true일 때, 제거합니다. self 의 각 요소.
24array.each { |item| block }
self 의 각 요소에 대해 한 번 호출됩니다. block을 전달합니다.
25array.each_index { |index| block }
Array#each와 동일하지만, 요소를 전달합니다. index이며, 요소 자체를 전달하는 대신.
26array.empty?
배열 자체가 요소를 포함하지 않으면 true를 반환합니다.
27array.eql?(other)
만약 arrayother 는 동일한 객체인지, 또는 두 개의 배열이 동일한 내용을 가지고 있으면 true를 반환합니다.
28array.fetch(index) [or]
array.fetch(index, default) [or]
array.fetch(index) { |index| block }

위치를 반환합니다. index 위치를 시도하면 index 의 요소를 던집니다. 만약 배열 외부에 위치하면 첫 번째 형식이 IndexError 에러를 반환하며default block 하면 index 을 전달합니다. index 의 값입니다. 음수 값을 입력하면
29배열의 마지막 부분에서 시작하여 계산합니다.
array.fill(obj) [or]
array.fill(obj, start [, length]) [or]
array.fill(obj, range) [or]
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의 값을 사용합니다.을 채웁니다.배열.block 각 요소의 절대 인덱스를 포함한 block을 전달합니다.
30array.first [or]
array.first(n)

배열의 첫 번째 요소 또는 앞 n 요소가 있습니다. 배열이 비어 있으면 첫 번째 형식이 반환 nil의 두 번째 형식은 빈 배열을 반환합니다.
31array.flatten
새로운 배열을 반환하며, 이 배열은 일维의 평면화된 배열입니다(재귀적).
32array.flatten!
array.reverse array 평면화를 수행합니다. 변화가 없으면 반환 nil。(배열은 서브 배열을 포함하지 않습니다。)
33array.frozen?
만약 array frozen 상태(또는 정렬 중 임시로冻结된 경우)면 true를 반환합니다.
34array.hash
배열의 해시 코드를 계산합니다. 내용이 같은 배열은 같은 해시 코드를 가집니다.
35array.include?(obj)
만약 self 에 포함됩니다. obj면 true를 반환하며, 그렇지 않으면 false를 반환합니다.
36array.index(obj)
반환 self obj에 일치하는 객체의 index미atches를 찾지 못하면 nil
37array.indexes(i1, i2, ... iN) [or]
array.indices(i1, i2, ... iN)

이 메서드는 Ruby의 최신 버전에서 폐지되었습니다. 따라서 Array#values_at를 사용하십시오.
38array.indices(i1, i2, ... iN) [or]
array.indexes(i1, i2, ... iN)

이 메서드는 Ruby의 최신 버전에서 폐지되었습니다. 따라서 Array#values_at를 사용하십시오.
39array.insert(index, obj...)
주어진 index 의 요소 앞에 주어진 값을 삽입합니다. index는 음수 값일 수 있습니다.
40array.inspect
创建一个数组的可打印版本。
41array.join(sep=$,)
返回一个字符串,通过把数组的每个元素转换为字符串,并使用 sep 分隔进行创建的。
42array.last [or] array.last(n)
반환 self 的最后一个元素。如果数组为,则第一种形式返回 nil
43array.length
반환 self 中元素的个数。可能为零。
44array.map { |item| block } [or]
array.collect { |item| block }

self 的每个元素调用一次 block。创建一个新的数组,包含 block 返回的值。
45array.map! { |item| block } [or]
array.collect! { |item| block }

array 的每个元素调用一次 block,把元素替换为 block 返回的值。
46array.nitems
반환 self 中 non-nil 元素的个数。可能为零。
47array.pack(aTemplateString)
根据 aTemplateString 中的指令,把数组的内容压缩为二进制序列。指令 A、 a 和 Z 后可以跟一个表示结果字段宽度的数字。剩余的指令也可以带有一个表示要转换的数组元素个数的数字。如果数字是一个星号(*),则所有剩余的数组元素都将被转换。任何指令后都可以跟一个下划线(_),表示指定类型使用底层平台的本地尺寸大小,否则使用独立于平台的一致的尺寸大小。在模板字符串中空格会被忽略。
48array.pop
에서 array 中移除最后一个元素,并返回该元素。如果 array 为空则返回 nil
49array.push(obj, ...)
把给定的 obj 附加到数组的末尾。该表达式返回数组本身,所以几个附加可以连在一起。
50array.rassoc(key)
搜索一个数组,其元素也是数组,使用 == 把 key 与每个包含的数组的第二个元素进行比较。如果匹配则返回第一个包含的数组。
51array.reject { |item| block }
返回一个新的数组,包含当 block 不为 true 时的数组项。
52array.reject! { |item| block }
当 block 为真时,从 array 删除元素,如果没有变化则返回 nil相当于 Array#delete_if。
53array.replace(other_array)
array.reverse array 的内容替换为 other_array array.replace(other_array)
54의 내용을 대체합니다.
other_array
55의 내용을 필요에 따라 잘라내거나 확장합니다.
array.reverse array array.reverse_each {|item| block }
56역순으로 정렬된 새로운 배열을 포함합니다.
array.reverse! array array.reverse_each {|item| block }
57반전합니다.
array.rindex(obj) nil
58array.select {|item| block }
배열로부터 연속적인 요소를 전달하여 block을 호출하고, block이 반환한 값을 포함한 배열을 반환합니다. true 값을 가진 요소를 반환합니다.
59array.shift
반환 self 의 첫 번째 요소를 가져와 이 요소를 제거합니다(모든 다른 요소를 한 단계 내려옵니다). 배열이 비어 있으면, 반환 nil
60array.size
반환 array 의 길이(요소의 개수)입니다. length의 별명입니다.
61array.slice(index) [또는] array.slice(start, length) [또는]
array.slice(range) [또는] array[index] [또는]
array[start, length] [또는] array[range]

반환 인덱스 index 의 요소를 반환하거나 start 부터 length 요소의 서브 배열을 반환하거나 range 지정된 서브 배열을 반환합니다. 음수 인덱스는 배열의 끝에서 시작하여 계산됩니다(-1 마지막 요소입니다). 만약 index(또는 시작 인덱스)범위를 벗어났을 경우, 반환 nil
62array.slice!(index) [또는] array.slice!(start, length) [또는]
array.slice!(range)

삭제 index(길이는 선택 사항입니다)또는 range 지정된 요소를 반환합니다. 삭제된 객체, 서브 배열을 반환하고, 만약 index 범위를 벗어났을 경우, 반환 nil
63array.sort [또는] array.sort { |a, b| block }
정렬된 배열을 반환합니다.
64array.sort! [또는] array.sort! { |a, b| block }
배열을 정렬합니다.
65array.to_a
반환 self에서 Array 의 자식 클래스에서 호출되면, 수신된 매개변수를 Array 객체로 변환합니다.
66array.to_ary
self를 반환.
67array.to_s
self.join을 반환.
68array.transpose
self는 배열의 배열을 가정하고, 행과 열을 교환.
69array.uniq
중복을 제거한 새로운 배열을 반환. array 의 중복 값.
70array.uniq!
에서 self 에서 중복 요소를 제거합니다. 변경이 없다면(즉, 중복이 없다면), nil
71array.unshift(obj, ...)
객체를 배열의 앞에 배치하고, 다른 요소를 한 자리 상향 이동.
72array.values_at(selector,...)
self에서 주어진 selector(한 개 또는 여러 개)의 요소와相对应하는 요소.
73array.zip(arg, ...) [or]
array.zip(arg, ...){ | arr | block }

모든 매개변수를 배열로 변환한 후, array 의 요소는 각 매개변수에 해당하는 요소와 결합됩니다.

배열 pack 지시

아래 표는 메서드 Array#pack의 압축 지시를 나열합니다.

지시설명
@절대 위치로 이동.
AASCII 문자열(공백으로 채우기, count는 너비).
aASCII 문자열(널로 채우기, count는 너비).
B비트 문자열(내림차순).
b비트 문자열(오름차순).
C미정의된 문자.
c문자.
D, d이진정도 부호 floating-point number, 원시 형식.
E이진정도 부호 floating-point number, little.-endian 바이트 순서
e단정도 부호 floating-point number, little.-endian 바이트 순서
F, f단정도 부호 floating-point number, 원시 형식.
G이진정도 부호 floating-point number, 네트워크(big-endian) 바이트 순서.
g단정도 부호 floating-point number, 네트워크(big-endian) 바이트 순서.
H16진수 문자열(상위 숫자 우선).
h16진수 문자열(하위 숫자 우선).
I미정의된 정수.
i정수.
L미정의된 long.
lLong.
M출력 가능한, MIME 인코딩을 참조.
mBase64 문자열을 인코딩.
NLong, 네트워크(big-endian) 바이트 순서.
nShort, 네트워크(big-endian) 바이트 순서.
P구조체(고정 길이 문자열)를 가리키는 주소.
p빈 문자열을 가리키는 주소.
Q, q64 비트 숫자.
S미정의된 short.
sShort.
UUTF-8。
uUU 인코딩 문자열
VLong, little-endian 바이트 순서
vShort, little-endian 바이트 순서
wBER 압축된 정수 \fnm。
X한 바이트를 더 앞으로 이동합니다。
xNULL 바이트
Za와 동일하지만 null은 추가됩니다 *。

온라인 예제

다음 예제를 시도하여 다양한 데이터를 압축하세요。

온라인 예제

a = [ "a", "b", "c" ]
n = [ 65, 66, 67 ]
puts a.pack("A3A3A3)   #=> "a  b  c  "
puts a.pack("a3a3a3}
puts n.pack("ccc")      #=> "ABC"

위의 예제 실행 결과는 다음과 같습니다:

a  b  c
abc
ABC