웹사이트 검색

Ruby에서 배열로 작업하는 방법


소개

배열요소라고 하는 값 목록을 나타내는 데이터 구조입니다. 배열을 사용하면 단일 변수에 여러 값을 저장할 수 있습니다. Ruby에서 배열은 숫자, 문자열 및 기타 Ruby 객체를 포함한 모든 데이터 유형을 포함할 수 있습니다. 이렇게 하면 코드를 압축하고 구성하여 더 읽기 쉽고 유지 관리할 수 있습니다. 모든 배열은 호출할 수 있는 고유한 메서드가 있는 개체로, 데이터 집합 작업을 위한 표준화된 방법을 제공합니다.

이 자습서에서는 배열을 만들고 포함된 값에 액세스하고 배열의 요소를 추가, 수정 및 제거하고 배열의 요소를 반복하여 더 복잡한 문제를 해결합니다.

배열 만들기

배열을 만드는 방법을 자세히 살펴보는 것으로 시작합니다. 예를 들어, 다음은 다양한 상어 종의 목록입니다. 배열이 없으면 개별 변수에 저장할 수 있습니다.

shark1 = "Hammerhead"
shark2 = "Great White"
shark3 = "Tiger"

이 접근 방식은 장황하고 유연하지 않기 때문에 유지 관리가 빠르게 어려워질 수 있습니다. 다른 상어를 추가한다는 것은 추가 변수를 추가하고 추적해야 함을 의미합니다.

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

sharks = ["Hammerhead", "Great White", "Tiger"]

3개의 개별 변수를 만드는 대신 이제 3개의 상어를 모두 포함하는 하나의 변수가 있습니다. 이 예에서는 대괄호([])를 사용하여 배열을 만들고 각 항목을 쉼표로 구분했습니다. 추가 상어를 추가해야 하는 경우 새 변수를 만들고 관리하는 대신 배열에 다른 상어를 추가합니다.

배열의 내용을 표시하는 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{} 메서드를 사용하면 따옴표와 쉼표를 건너뛸 수 있습니다.

배열은 유사한 데이터 유형의 목록을 함께 그룹화하는 데 자주 사용되지만 Ruby에서는 배열에 모든 값 또는 혼합 값이 포함될 수 있습니다. 여기에는 다른 어레이가 포함됩니다. 다음은 문자열, nil 값, 정수 및 문자열 배열을 포함하는 배열의 예입니다.

record = [
    "Sammy",
    null,
    7,
    [
        "another",
        "array",
    ]
]

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

배열의 항목에 액세스

특정 항목 또는 배열의 요소에 액세스하려면 색인 또는 배열에서의 위치를 참조합니다. Ruby에서 인덱스는 0부터 시작합니다. sharks 배열에서 첫 번째 요소를 검색하려면 대괄호를 사용하여 요소의 인덱스를 변수에 추가합니다.

sharks = ["Hammerhead", "Great White", "Tiger"]

sharks 배열에는 세 가지 요소가 있습니다. 다음은 sharks 배열의 각 요소가 인덱싱되는 방법에 대한 분석입니다.

Hammerhead Great White Tiger
0 1 2

배열의 첫 번째 요소는 0에 인덱싱된 Hammerhead입니다. 마지막 요소는 Tiger이며 2에 인덱싱됩니다. 카운팅은 인덱스에서 0부터 시작하는데, 이는 1부터 카운팅을 시작하는 자연스러운 직관에 어긋나므로 자연스럽게 될 때까지 이 점을 염두에 두어야 합니다.

참고: 인덱스를 오프셋으로 생각하면 도움이 될 수 있습니다. 즉, 배열 시작부터의 위치 수를 의미합니다. 첫 번째 요소는 시작 부분에 있으므로 해당 오프셋 또는 인덱스는 0입니다. 두 번째 요소는 배열의 첫 번째 항목에서 한 지점 떨어져 있으므로 해당 오프셋 또는 인덱스는 1입니다.

length 메소드를 사용하여 배열에 몇 개의 요소가 있는지 확인할 수 있습니다.

sharks.length
Output
3

sharks의 인덱스는 0에서 시작하여 2로 이동하지만 length 속성은 다음의 요소 수를 반환합니다. 3인 배열입니다. 인덱스와 전혀 관련이 없습니다.

Tiger와 같은 배열의 특정 요소의 인덱스 번호를 찾으려면 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

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

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

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

print nested_array[1][0];
Output
coral

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

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

배열에 요소 추가

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]
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 메서드를 사용하세요. sharks 배열에서 이전에 nil 배열 요소를 만들었습니다. 이제, 당신은 그것을 제거할 것입니다.

먼저 배열에서 해당 위치를 찾습니다. 인덱스 메서드를 사용하여 이를 수행할 수 있습니다.

print sharks.index(nil)
Output
4

그런 다음 delete_at를 사용하여 인덱스 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, popshift 메서드는 모두 원래 배열을 변경하고 삭제한 요소를 반환합니다.

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 메서드를 사용하여 먼저 요소를 찾을 수 있습니다.

이제 배열의 모든 요소로 작업하는 방법을 살펴보겠습니다.

배열 반복

Ruby는 배열을 반복하는 다양한 방법을 제공하며 사용하는 각 방법은 수행하려는 작업의 종류에 따라 다릅니다. 다음으로 배열을 반복하고 각 요소를 표시하는 방법을 살펴보겠습니다.

Ruby는 for..in 구문을 제공합니다.

sharks = ["Hammerhead", "Great White", "Tiger", "Whale"]
for shark in sharks do
  puts shark
end

sharks 배열의 각 요소에 대해 Ruby는 해당 요소를 로컬 변수 shark에 할당합니다. 그런 다음 puts를 사용하여 요소의 값을 인쇄할 수 있습니다.

하지만 for..in은 자주 볼 수 없습니다. Ruby 배열은 개체이며 요소 작업을 위한 메서드를 제공합니다. each 메소드는 for..in과 유사한 방식으로 작동하지만 구문이 다릅니다.

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

each 메서드는 Ruby 프로그래밍에서 자주 볼 수 있는 구문을 사용합니다. Ruby 블록을 인수로 사용합니다. 블록은 메서드 컨텍스트에서 나중에 실행될 일부 코드입니다. 이 경우 코드는 상어 넣기입니다. 파이프 문자(|)로 묶인 shark 키워드는 블록이 액세스할 배열의 요소를 나타내는 지역 변수입니다. Ruby는 이 변수에 요소를 할당하고 블록의 코드를 실행합니다. each 메서드는 배열의 각 요소에 대해 이 프로세스를 반복합니다.

Output
Hammerhead Great White Tiger Whale

블록이 한 줄이면 Ruby 개발자가 doend 키워드를 중괄호로 바꾸고 전체 명령문을 한 줄로 압축하는 것을 자주 볼 수 있습니다.

...
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

배열의 각 요소에 대해 Ruby는 요소를 변수 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

웹 사이트의 데이터베이스에서 항목을 표시해야 하거나 파일에서 줄을 읽고 내용을 처리할 때와 같이 자신의 프로그램에서 배열의 요소를 자주 반복합니다.

결론

배열은 Ruby 프로그래밍의 매우 다재다능하고 기본적인 부분입니다. 이 자습서에서는 배열을 만들고 개별 요소에 액세스했습니다. 또한 배열의 요소를 추가, 제거 및 수정했습니다. 마지막으로 데이터를 표시하는 일반적인 방법으로 사용되는 배열을 반복하고 해당 내용을 표시하는 두 가지 방법을 살펴보았습니다.

Ruby의 데이터 유형 이해 자습서를 읽어 Ruby의 다른 데이터 유형에 대해 알아보세요.