루비에서 배열 사용하는 방법

소개

배열은 값 목록을 나타내는 데이터 구조입니다. 이를 요소라고 합니다. 배열을 사용하면 하나의 변수에 여러 값을 저장할 수 있습니다. Ruby에서 배열은 숫자, 문자열 및 다른 Ruby 객체를 포함한 모든 데이터 유형을 포함할 수 있습니다. 이를 통해 코드를 압축하고 정리하여 가독성과 유지 보수성을 높일 수 있습니다. 모든 배열은 자체 메소드를 가진 객체이며 데이터 세트를 처리하는 표준화된 방법을 제공합니다.

이 튜토리얼에서는 배열을 생성하고, 포함된 값을 액세스하고, 배열에 요소를 추가, 수정 및 제거하며, 배열의 요소를 반복하여 더 복잡한 문제를 해결하는 방법을 살펴볼 것입니다.

배열 생성

더 자세히 배열을 생성하는 방법을 살펴보겠습니다. 예를 들어, 다양한 상어 종의 목록이 있습니다. 배열을 사용하지 않으면 각각의 변수에 저장할 수 있습니다:

sharks.rb
shark1 = "Hammerhead"
shark2 = "Great White"
shark3 = "Tiger"

이 방법은 상세하고 유지하기 어려울 수 있으며, 유연성이 부족합니다. 다른 상어를 추가하려면 추가적인 변수를 추가하고 추적해야 합니다.

배열을 사용하면 데이터를 단순화할 수 있습니다. Ruby 프로그램에서 배열을 생성하려면 대괄호 ([])를 사용하고 저장하려는 값을 쉼표로 구분하면 됩니다:

sharks.rb
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 값, 정수 및 문자열 배열을 포함하는 배열의 예입니다:

mixed_data.rb
record = [
    "Sammy",
    null,
    7,
    [
        "another",
        "array",
    ]
]

이제 배열에 저장된 데이터에 액세스하는 방법을 살펴보겠습니다.

배열에서 항목에 액세스하기

한정된 항목 또는 배열의 요소에 액세스하려면 해당 인덱스 또는 배열에서의 위치를 참조하세요. 루비에서 인덱스는 0에서 시작합니다. sharks 배열에서 첫 번째 요소를 검색하려면 변수 뒤에 요소의 인덱스를 대괄호로 추가합니다:

sharks.rb
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
Output
3

sharks의 인덱스가 0에서 2로 시작하더라도 length 속성은 배열의 요소 수, 즉 3을 반환합니다. 이는 전혀 인덱스에 관심을 두지 않습니다.

배열에서 특정 요소의 인덱스 번호를 찾고 싶다면 index() 메서드를 사용하세요:

print sharks.index("Tiger")
Output
2

이는 해당 텍스트를 포함하는 첫 번째 요소의 인덱스를 반환합니다. 값이 존재하지 않는 경우와 같이 인덱스 번호가 없으면 콘솔은 nil을 반환합니다:

print sharks.index("Whale")
Output
nil

Ruby에서 배열의 마지막 요소를 가져오려면 인덱스 -1을 사용하십시오:

print sharks[-1]
Output
"Tiger"

Ruby는 인덱스를 사용하지 않고 첫 번째와 마지막 요소를 가져 오기 위해 firstlast 메소드를 제공합니다:

puts sharks.first
puts sharks.last
Output
"Hammerhead" "Tiger"

존재하지 않는 인덱스에 액세스하려고하면 nil이 반환됩니다:

sharks[10]
Output
nil

배열은 중첩 배열이라고하는 다른 배열을 포함 할 수 있습니다. 이것은 프로그램에서 이차원 데이터 세트를 모델링하는 한 가지 방법입니다. 다음은 중첩 배열의 예입니다:

nested_array = [
    [
        "salmon",
        "halibut",
    ],
    [
        "coral",
        "reef",
    ]
]

중첩 배열에서 요소에 액세스하려면 내부 배열에 해당하는 다른 인덱스 번호를 추가해야합니다. 예를 들어,이 중첩 배열에서 값을 coral로 검색하려면 다음 문을 사용해야합니다:

print nested_array[1][0];
Output
coral

이 예에서는 nested_array 변수의 위치 1에있는 배열에 액세스하여 배열 ["coral", "reef"]를 반환했습니다. 그런 다음 해당 배열의 위치 0에있는 요소에 액세스하여 "coral"을 얻었습니다.

이제 배열에 요소를 추가하는 방법을 살펴 보겠습니다.

배열에 요소 추가하기

sharks 배열에는 0에서 2까지 인덱스가 있는 세 개의 요소가 있습니다:

sharks.rb
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]
Output
nil

배열에서 다음 사용 가능한 색인을 찾는 것은 오류가 발생하기 쉽고 추가 시간이 걸립니다. 배열 끝에 요소를 추가하는 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)
Output
4

그런 다음 인덱스 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이 제거되었습니다.

popshift를 사용하여 배열의 시작부분과 끝에서 요소를 제거할 수 있습니다. 가능한 경우 pop을 사용하는 것이 좋습니다. 배열의 나머지 항목은 원래의 인덱스 번호를 유지합니다.

delete_at, pop, shift 메소드는 모두 원래 배열을 변경하고 삭제한 요소를 반환합니다::

sharks.rb
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}"
Output
Deleted_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과 유사하게 작동하지만 다른 구문을 가지고 있습니다:

each.rb
sharks = ["Hammerhead", "Great White", "Tiger", "Whale"]
sharks.each do |shark|
  puts shark
end

each 메소드는 루비 프로그래밍에서 자주 볼 수있는 구문을 사용합니다. 이는 루비 블록을 인수로 취합니다. 블록은 메소드의 컨텍스트에서 나중에 실행 될 일부 코드입니다. 이 경우, 코드는 puts shark입니다. shark 키워드는 파이프 문자 (|)로 둘러싸인 배열의 요소를 나타내는 로컬 변수입니다. 루비는 이 요소를 이 변수에 할당하고 블록 내의 코드를 실행합니다. each 메소드는 배열의 각 요소에 대해이 프로세스를 반복합니다.

Output
Hammerhead Great White Tiger Whale

블록이 한 줄일 때, 루비 개발자들이 종종 doend 키워드를 중괄호로 대체하고 전체 문을 한 줄로 압축하는 것을 볼 수 있습니다.

each.rb
...
sharks.each {|shark| puts shark }

이렇게하면 동일한 결과가 생성되지만 더 적은 줄의 코드가 사용됩니다.

each_with_index 메소드도 비슷한 방식으로 작동하지만 배열 요소의 인덱스에도 액세스 할 수 있습니다. 이 프로그램은 각 요소의 인덱스와 값을 인쇄하기 위해 each_with_index를 사용합니다:

each_with_index.rb
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 변수에 할당합니다. 그런 다음 블록에서 이러한 변수를 모두 참조 할 수 있습니다.

Output
The 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