소개
배열은 값 목록을 나타내는 데이터 구조입니다. 이를 요소라고 합니다. 배열을 사용하면 하나의 변수에 여러 값을 저장할 수 있습니다. Ruby에서 배열은 숫자, 문자열 및 다른 Ruby 객체를 포함한 모든 데이터 유형을 포함할 수 있습니다. 이를 통해 코드를 압축하고 정리하여 가독성과 유지 보수성을 높일 수 있습니다. 모든 배열은 자체 메소드를 가진 객체이며 데이터 세트를 처리하는 표준화된 방법을 제공합니다.
이 튜토리얼에서는 배열을 생성하고, 포함된 값을 액세스하고, 배열에 요소를 추가, 수정 및 제거하며, 배열의 요소를 반복하여 더 복잡한 문제를 해결하는 방법을 살펴볼 것입니다.
배열 생성
더 자세히 배열을 생성하는 방법을 살펴보겠습니다. 예를 들어, 다양한 상어 종의 목록이 있습니다. 배열을 사용하지 않으면 각각의 변수에 저장할 수 있습니다:
shark1 = "Hammerhead"
shark2 = "Great White"
shark3 = "Tiger"
이 방법은 상세하고 유지하기 어려울 수 있으며, 유연성이 부족합니다. 다른 상어를 추가하려면 추가적인 변수를 추가하고 추적해야 합니다.
배열을 사용하면 데이터를 단순화할 수 있습니다. Ruby 프로그램에서 배열을 생성하려면 대괄호 ([]
)를 사용하고 저장하려는 값을 쉼표로 구분하면 됩니다:
sharks = ["Hammerhead", "Great White", "Tiger"]
대신 세 개의 별도 변수를 만드는 대신 이제 세 상어가 모두 포함된 변수가 있습니다. 이 예에서는 대괄호 — []
—를 사용하여 배열을 만들고 각 항목을 쉼표로 구분했습니다. 추가 상어를 추가해야 한다면 새 변수를 생성하고 관리하는 대신 배열에 또 다른 상어를 추가할 것입니다.
전체 배열을 print
문으로 출력할 수 있습니다. 이는 배열의 내용을 표시할 것입니다:
print sharks
Output["Hammerhead", "Great White", "Tiger"]
각 항목이 단일 단어인 배열을 만들려면 %w{}
구문을 사용할 수 있습니다. 이는 단어 배열을 생성합니다:
days = %w{Monday Tuesday Wednesday Thursday Friday Saturday Sunday}
이는 대괄호로 배열을 만드는 것과 동등합니다:
days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
그러나 %w{}
메서드를 사용하면 따옴표와 쉼표를 생략할 수 있음을 주목하세요.
배열은 종종 유사한 데이터 유형의 목록을 그룹화하는 데 사용되지만 루비에서 배열은 어떤 값이든 포함하거나 값을 혼합할 수 있습니다. 이는 다른 배열을 포함합니다. 문자열, nil
값, 정수 및 문자열 배열을 포함하는 배열의 예입니다:
record = [
"Sammy",
null,
7,
[
"another",
"array",
]
]
이제 배열에 저장된 데이터에 액세스하는 방법을 살펴보겠습니다.
배열에서 항목에 액세스하기
한정된 항목 또는 배열의 요소에 액세스하려면 해당 인덱스 또는 배열에서의 위치를 참조하세요. 루비에서 인덱스는 0에서 시작합니다. sharks
배열에서 첫 번째 요소를 검색하려면 변수 뒤에 요소의 인덱스를 대괄호로 추가합니다:
sharks = ["Hammerhead", "Great White", "Tiger"]
sharks
배열에는 세 개의 요소가 있습니다. sharks
배열의 각 요소가 인덱싱된 방법을 살펴보겠습니다.
Hammerhead | Great White | Tiger |
---|---|---|
0 | 1 | 2 |
배열의 첫 번째 요소는 Hammerhead
이며 0
으로 색인화됩니다. 마지막 요소는 Tiger
이며 2
로 색인화됩니다. 색인은 0
에서 시작하여 1에서 계산을 시작하는 자연스러운 직관과는 다르게 작동하므로 자연스러워질 때까지 이를 기억하는 것이 좋습니다.
참고: 인덱스를 오프셋으로 생각하는 것이 도움이 될 수 있습니다. 첫 번째 요소는 시작 부분에 있으므로 오프셋 또는 인덱스는 0
입니다. 두 번째 요소는 배열의 첫 번째 항목에서 한 곳 떨어져 있으므로 오프셋 또는 인덱스는 1
입니다.
배열의 요소 수를 length
메서드로 확인할 수 있습니다:
sharks.length
Output3
sharks
의 인덱스가 0
에서 2
로 시작하더라도 length
속성은 배열의 요소 수, 즉 3
을 반환합니다. 이는 전혀 인덱스에 관심을 두지 않습니다.
배열에서 특정 요소의 인덱스 번호를 찾고 싶다면 index()
메서드를 사용하세요:
print sharks.index("Tiger")
Output2
이는 해당 텍스트를 포함하는 첫 번째 요소의 인덱스를 반환합니다. 값이 존재하지 않는 경우와 같이 인덱스 번호가 없으면 콘솔은 nil
을 반환합니다:
print sharks.index("Whale")
Outputnil
Ruby에서 배열의 마지막 요소를 가져오려면 인덱스 -1
을 사용하십시오:
print sharks[-1]
Output"Tiger"
Ruby는 인덱스를 사용하지 않고 첫 번째와 마지막 요소를 가져 오기 위해 first
및 last
메소드를 제공합니다:
puts sharks.first
puts sharks.last
Output"Hammerhead"
"Tiger"
존재하지 않는 인덱스에 액세스하려고하면 nil
이 반환됩니다:
sharks[10]
Outputnil
배열은 중첩 배열이라고하는 다른 배열을 포함 할 수 있습니다. 이것은 프로그램에서 이차원 데이터 세트를 모델링하는 한 가지 방법입니다. 다음은 중첩 배열의 예입니다:
nested_array = [
[
"salmon",
"halibut",
],
[
"coral",
"reef",
]
]
중첩 배열에서 요소에 액세스하려면 내부 배열에 해당하는 다른 인덱스 번호를 추가해야합니다. 예를 들어,이 중첩 배열에서 값을 coral
로 검색하려면 다음 문을 사용해야합니다:
print nested_array[1][0];
Outputcoral
이 예에서는 nested_array
변수의 위치 1
에있는 배열에 액세스하여 배열 ["coral", "reef"]
를 반환했습니다. 그런 다음 해당 배열의 위치 0
에있는 요소에 액세스하여 "coral"
을 얻었습니다.
이제 배열에 요소를 추가하는 방법을 살펴 보겠습니다.
배열에 요소 추가하기
sharks
배열에는 0
에서 2
까지 인덱스가 있는 세 개의 요소가 있습니다:
sharks = ["Hammerhead", "Great White", "Tiger"]
새 요소를 추가하는 몇 가지 방법이 있습니다. 다음 색인에 값을 할당할 수 있습니다. 이 경우에는 3
이 될 것입니다:
sharks[3] = "Whale";
print sharks
Output["Hammerhead", "Great White", "Tiger", "Whale"]
이 방법은 오류가 발생하기 쉽습니다. 요소를 추가하고 실수로 색인을 건너뛰면 배열에 nil
요소가 생성됩니다.
sharks[5] = "Sand";
print sharks;
Output["Hammerhead", "Great White", "Tiger", "Whale", nil, "Sand"]
추가한 배열 요소에 액세스하려고 시도하면 그 값을 반환하게 되는데, 이 값은 nil
일 것입니다:
sharks[4]
Outputnil
배열에서 다음 사용 가능한 색인을 찾는 것은 오류가 발생하기 쉽고 추가 시간이 걸립니다. 배열 끝에 요소를 추가하는 push
메서드를 사용하여 오류를 방지하세요:
sharks.push("Thresher")
print sharks
Output["Hammerhead", "Great White", "Tiger", "Whale", nil, "Whale", "Thresher"]
push
메서드 대신 <<
구문을 사용하여 배열 끝에 요소를 추가할 수도 있습니다:
sharks << "Bullhead"
Output["Hammerhead", "Great White", "Tiger", "Whale", nil, "Whale", "Thresher", "Bullhead"]
배열의 시작에 요소를 추가하려면 unshift()
메서드를 사용하세요:
sharks.unshift("Angel")
print sharks
Output["Angel", "Hammerhead", "Great White", "Tiger", "Whale", nil, "Whale", "Thresher", "Bullhead"]
요소를 추가하는 방법을 알았으므로 요소를 제거하는 방법을 살펴보겠습니다.
배열에서 요소 제거하기
배열에서 특정 요소를 제거하려면 delete
또는 delete_at
메서드를 사용하세요. 이전에 nil
배열 요소를 만든 sharks
배열에서 제거해 보겠습니다.
먼저 배열에서 해당 요소의 위치를 찾으세요. 그러려면 index
메서드를 사용할 수 있습니다:
print sharks.index(nil)
Output4
그런 다음 인덱스 4
의 요소를 제거하고 배열을 출력하세요:
sharks.delete_at(4)
print sharks
Output["Angel", "Hammerhead", "Great White", "Tiger", "Whale", "Thresher", "Bullhead"]
delete
메소드는 전달한 값과 일치하는 배열 요소를 제거합니다. 배열에서 Whale
을 제거하는 데 사용하십시오:
sharks.delete("Whale")
print sharks;
Output["Angel", "Hammerhead", "Great White", "Tiger", "Thresher", "Bullhead"]
delete
메소드는 전달한 값의 모든 발생을 제거하므로 배열에 중복 요소가 있으면 모두 제거됩니다.
pop
메소드는 배열에서 마지막 요소를 제거합니다:
sharks.pop
print sharks;
Output["Angel", "Hammerhead", "Great White", "Tiger", "Thresher"]
Bullhead
가 배열의 마지막 요소로 제거되었습니다. 배열의 첫 번째 요소를 제거하려면 shift
메소드를 사용하십시오:
sharks.shift
print sharks
Output["Hammerhead", "Great White", "Tiger", "Thresher"]
이번에는 배열의 시작부분에서 Angel
이 제거되었습니다.
pop
과 shift
를 사용하여 배열의 시작부분과 끝에서 요소를 제거할 수 있습니다. 가능한 경우 pop
을 사용하는 것이 좋습니다. 배열의 나머지 항목은 원래의 인덱스 번호를 유지합니다.
delete_at
, pop
, shift
메소드는 모두 원래 배열을 변경하고 삭제한 요소를 반환합니다::
sharks = ["Hammerhead", "Great White", "Tiger", "Whale"]
deleted_at_element = sharks.delete_at(1)
popped_element = sharks.pop
puts "Deleted_at element: #{deleted_at_element}"
puts "Popped element: #{popped_element}"
puts "Remaining array: #{sharks}"
OutputDeleted_at element: Great White
Popped element: Whale
Remaining array: ["Hammerhead", "Tiger"]
이제 배열에서 요소를 제거하는 여러 가지 방법을 알았습니다. 이제 이미 있는 요소를 수정하는 방법을 살펴보겠습니다.
배열에서 기존 요소 수정하기
배열의 요소를 업데이트하려면 할당 연산자를 사용하여 요소의 인덱스에 새 값을 할당하면 됩니다. 이는 일반 변수와 마찬가지로 작동합니다.
새로운 상어 배열이 주어지면, 인덱스 0
에 "Hammerhead"
가 있습니다. 여기서 "Hammerhead"
를 "Angel"
로 대체할 것입니다:
sharks = ["Hammerhead", "Great White", "Tiger", "Whale"]
sharks[0] = "Angel"
print sharks;
Output["Angel", "Great White", "Tiger", "Whale"]
원하는 요소를 찾을 때와 마찬가지로 요소를 업데이트하려면 먼저 index
메서드를 사용하여 해당 요소를 찾을 수 있습니다.
이제 배열의 모든 요소와 작업하는 방법을 살펴보겠습니다.
배열 반복
루비는 배열을 반복하는 여러 가지 방법을 제공하며 사용하는 메서드는 수행하려는 작업의 종류에 따라 다릅니다. 다음으로 배열을 반복하고 각 요소를 표시하는 방법을 알아보겠습니다.
루비는 for..in
구문을 제공합니다:
sharks = ["Hammerhead", "Great White", "Tiger", "Whale"]
for shark in sharks do
puts shark
end
sharks
배열의 각 요소에 대해 루비는 해당 요소를 지역 변수 shark
에 할당합니다. 그런 다음 puts
를 사용하여 요소의 값을 출력할 수 있습니다.
하지만 for..in
은 자주 보지 않을 것입니다. 루비 배열은 객체이며 요소와 작업하기 위해 each
메서드를 제공합니다. each
메서드는 for..in
과 유사하게 작동하지만 다른 구문을 가지고 있습니다:
sharks = ["Hammerhead", "Great White", "Tiger", "Whale"]
sharks.each do |shark|
puts shark
end
each
메소드는 루비 프로그래밍에서 자주 볼 수있는 구문을 사용합니다. 이는 루비 블록을 인수로 취합니다. 블록은 메소드의 컨텍스트에서 나중에 실행 될 일부 코드입니다. 이 경우, 코드는 puts shark
입니다. shark
키워드는 파이프 문자 (|
)로 둘러싸인 배열의 요소를 나타내는 로컬 변수입니다. 루비는 이 요소를 이 변수에 할당하고 블록 내의 코드를 실행합니다. each
메소드는 배열의 각 요소에 대해이 프로세스를 반복합니다.
OutputHammerhead
Great White
Tiger
Whale
블록이 한 줄일 때, 루비 개발자들이 종종 do
및 end
키워드를 중괄호로 대체하고 전체 문을 한 줄로 압축하는 것을 볼 수 있습니다.
...
sharks.each {|shark| puts shark }
이렇게하면 동일한 결과가 생성되지만 더 적은 줄의 코드가 사용됩니다.
each_with_index
메소드도 비슷한 방식으로 작동하지만 배열 요소의 인덱스에도 액세스 할 수 있습니다. 이 프로그램은 각 요소의 인덱스와 값을 인쇄하기 위해 each_with_index
를 사용합니다:
sharks = ["Hammerhead", "Great White", "Tiger", "Whale"]
sharks.each_with_index do |shark, index|
puts "The index is #{index}"
puts "The value is #{shark}"
end
배열의 각 요소에 대해 루비는 해당 요소를 변수 shark
에 할당하고 현재 인덱스를 index
변수에 할당합니다. 그런 다음 블록에서 이러한 변수를 모두 참조 할 수 있습니다.
OutputThe index is 0
The value is Hammerhead
The index is 1
The value is Great White
The index is 2
The value is Tiger
The index is 3
The value is Whale
자신의 프로그램에서 배열의 요소를 자주 반복 처리합니다. 웹 사이트에서 데이터베이스의 항목을 표시해야 할 때나 파일에서 행을 읽고 내용을 처리해야 할 때와 같은 경우입니다.
결론
배열은 루비 프로그래밍의 매우 다재다능하고 기본적인 부분입니다. 이 튜토리얼에서는 배열을 만들고 개별 요소에 액세스했습니다. 또한 배열에서 요소를 추가, 제거 및 수정했습니다. 마지막으로 배열을 반복하고 그 내용을 표시하는 두 가지 방법을 탐색했으며, 이는 데이터를 표시하는 일반적인 방법으로 사용됩니다.
루비에서 다른 데이터 유형에 대해 알아보려면 루비에서 데이터 유형 이해 튜토리얼을 읽어보세요.
Source:
https://www.digitalocean.com/community/tutorials/how-to-work-with-arrays-in-ruby