[Swift] Array(배열) 유용한 메서드 정리 (count, isEmpty, append, insert, remove, contains, etc)

Kim Hayeon·2024년 7월 24일
0

iOS

목록 보기
4/5
post-thumbnail

Swift 배열과 관련해서 자주 사용되고 유용한 메서드를 살펴보려고 합니다.
Swift에서 배열을 정의하고 사용하는 방법은 여러 가지가 있습니다. 기본적인 배열 생성부터 다양한 방법으로 배열을 초기화하고 접근하는 방법을 아래에 정리해 보았습니다.

배열 정의 및 초기화

  1. 빈 배열 초기화:

    • 타입을 명시하여 선언합니다.
    var intArray: [Int] = []
    var stringArray: [String] = []
    • Array 타입을 사용하여 선언합니다.
    var intArray = Array<Int>()
    var stringArray = Array<String>()
  2. 기본값으로 초기화:

    • 기본값과 크기를 지정하여 배열을 초기화합니다.
    var fiveZeros = Array(repeating: 0, count: 5)
    var fiveHello = Array(repeating: "Hello", count: 5)
  3. 리터럴로 초기화:

    • 배열 리터럴을 사용하여 배열을 초기화합니다.
    var numbers = [1, 2, 3, 4, 5]
    var words = ["apple", "banana", "cherry"]

배열 접근 및 수정

  1. 배열 요소 접근:

    • 인덱스를 사용하여 배열 요소에 접근합니다.
    let numbers = [1, 2, 3, 4, 5]
    let firstNumber = numbers[0] // 1
    let secondNumber = numbers[1] // 2
  2. 배열 요소 수정:

    • 인덱스를 사용하여 배열 요소를 수정합니다.
    var numbers = [1, 2, 3, 4, 5]
    numbers[0] = 10
    print(numbers) // [10, 2, 3, 4, 5]
  3. 배열 요소 추가:

    • append 메서드를 사용하여 배열의 끝에 요소를 추가합니다.
    var numbers = [1, 2, 3]
    numbers.append(4)
    print(numbers) // [1, 2, 3, 4]
    • += 연산자를 사용하여 배열에 요소를 추가합니다.
    var numbers = [1, 2, 3]
    numbers += [4, 5]
    print(numbers) // [1, 2, 3, 4, 5]
  4. 배열 요소 삽입:

    • insert 메서드를 사용하여 배열의 특정 위치에 요소를 삽입합니다.
    var numbers = [1, 2, 3]
    numbers.insert(0, at: 0)
    print(numbers) // [0, 1, 2, 3]
  5. 배열 요소 삭제:

    • remove 메서드를 사용하여 배열의 특정 위치에서 요소를 삭제합니다.
    var numbers = [1, 2, 3, 4, 5]
    numbers.remove(at: 2)
    print(numbers) // [1, 2, 4, 5]
    • removeLast 메서드를 사용하여 마지막 요소를 삭제합니다.
    var numbers = [1, 2, 3]
    numbers.removeLast()
    print(numbers) // [1, 2]
    • removeAll 메서드를 사용하여 모든 요소를 삭제합니다.
    var numbers = [1, 2, 3]
    numbers.removeAll()
    print(numbers) // []

배열 순회

  1. for-in 루프:

    • for-in 루프를 사용하여 배열의 각 요소를 순회합니다.
    let numbers = [1, 2, 3, 4, 5]
    for number in numbers {
        print(number)
    }
  2. enumerated:

    • enumerated 메서드를 사용하여 배열의 인덱스와 값을 동시에 순회합니다.
    let numbers = [1, 2, 3, 4, 5]
    for (index, number) in numbers.enumerated() {
        print("Index \(index) has value \(number)")
    }

배열 변형 및 조작

  1. map:

    • 배열의 각 요소에 대해 주어진 클로저를 적용한 결과를 갖는 새로운 배열을 반환합니다.
    let numbers = [1, 2, 3]
    let doubled = numbers.map { $0 * 2 }
    print(doubled) // [2, 4, 6]
  2. filter:

    • 조건을 만족하는 배열의 요소만을 포함하는 새로운 배열을 반환합니다.
    let numbers = [1, 2, 3, 4, 5]
    let evenNumbers = numbers.filter { $0 % 2 == 0 }
    print(evenNumbers) // [2, 4]
  3. reduce:

    • 배열의 모든 요소를 결합하여 단일 값을 생성합니다.
    let numbers = [1, 2, 3, 4, 5]
    let sum = numbers.reduce(0, +)
    print(sum) // 15
  4. sorted:

    • 배열을 정렬된 새로운 배열로 반환합니다.
    let numbers = [3, 1, 4, 5, 2]
    let sortedNumbers = numbers.sorted()
    print(sortedNumbers) // [1, 2, 3, 4, 5]

예제 코드

// 빈 배열 초기화
var intArray: [Int] = []
var stringArray = Array<String>()

// 기본값으로 초기화
var fiveZeros = Array(repeating: 0, count: 5)
var fiveHello = Array(repeating: "Hello", count: 5)

// 배열 리터럴로 초기화
var numbers = [1, 2, 3, 4, 5]
var words = ["apple", "banana", "cherry"]

// 요소 추가 및 수정
numbers.append(6)
numbers[0] = 10

// 요소 삭제
numbers.remove(at: 2)
numbers.removeLast()
numbers.removeAll()

print(numbers) // []

// 배열 순회
for word in words {
    print(word)
}

for (index, word) in words.enumerated() {
    print("Index \(index) has value \(word)")
}

// 배열 변형
let mappedNumbers = numbers.map { $0 * 2 }
let filteredNumbers = numbers.filter { $0 % 2 == 0 }
let reducedSum = numbers.reduce(0, +)

print(mappedNumbers)
print(filteredNumbers)
print(reducedSum)

기타 배열 메서드 및 함수

  1. dropFirstdropLast:

    • 배열에서 첫 번째 요소 또는 마지막 요소를 제거한 새로운 배열을 생성합니다.
    let numbers = [1, 2, 3, 4, 5]
    let dropFirstNumbers = numbers.dropFirst()
    let dropLastNumbers = numbers.dropLast()
    
    print(dropFirstNumbers) // [2, 3, 4, 5]
    print(dropLastNumbers)  // [1, 2, 3, 4]
  2. prefixsuffix:

    • 배열의 처음 n개 요소 또는 마지막 n개 요소를 반환합니다.
    let numbers = [1, 2, 3, 4, 5]
    let prefixNumbers = numbers.prefix(3)
    let suffixNumbers = numbers.suffix(2)
    
    print(prefixNumbers) // [1, 2, 3]
    print(suffixNumbers) // [4, 5]
  3. swapAt:

    • 배열의 두 인덱스에 있는 요소를 서로 교환합니다.
    var numbers = [1, 2, 3, 4, 5]
    numbers.swapAt(0, 4)
    
    print(numbers) // [5, 2, 3, 4, 1]
  4. shuffled:

    • 배열의 요소를 무작위로 섞은 새로운 배열을 반환합니다.
    let numbers = [1, 2, 3, 4, 5]
    let shuffledNumbers = numbers.shuffled()
    
    print(shuffledNumbers) // 무작위로 섞인 배열 (예: [3, 1, 5, 4, 2])
  5. sorted(by:):

    • 주어진 비교 기준에 따라 배열을 정렬한 새로운 배열을 반환합니다.
    let numbers = [5, 2, 3, 1, 4]
    let sortedNumbers = numbers.sorted(by: >)
    
    print(sortedNumbers) // [5, 4, 3, 2, 1]
  6. reversed:

    • 배열의 순서를 반대로 뒤집은 새로운 배열을 반환합니다.
    let numbers = [1, 2, 3, 4, 5]
    let reversedNumbers = numbers.reversed()
    
    print(Array(reversedNumbers)) // [5, 4, 3, 2, 1]
  7. compactMap:

    • 배열의 각 요소에 대해 주어진 클로저를 적용한 후 nil이 아닌 요소로 이루어진 새로운 배열을 반환합니다.
    let numbers: [Int?] = [1, 2, nil, 4, nil, 5]
    let nonOptionalNumbers = numbers.compactMap { $0 }
    
    print(nonOptionalNumbers) // [1, 2, 4, 5]
  8. flatMap:

    • 배열의 각 요소에 대해 주어진 클로저를 적용한 후 펼쳐서 새로운 배열을 반환합니다.
    let arrayOfArrays = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
    let flatArray = arrayOfArrays.flatMap { $0 }
    
    print(flatArray) // [1, 2, 3, 4, 5, 6, 7, 8, 9]
  9. partition(by:):

    • 배열을 기준으로 두 부분으로 나눕니다. 파티션의 인덱스를 반환합니다.
    var numbers = [10, 1, 2, 3, 9]
    let pivot = numbers.partition(by: { $0 >= 3 })
    
    print(numbers) // [1, 2, 3, 9, 10] 또는 다른 순서
    print(pivot)  // 2 (첫 번째 만족하는 요소의 인덱스)
  10. indices:

  • 배열의 전체 인덱스 범위를 반환합니다.
    let numbers = [1, 2, 3, 4, 5]
    for index in numbers.indices {
        print("Index \(index): \(numbers[index])")
    }

배열 변형 및 조작 예제 코드

let numbers = [1, 2, 3, 4, 5]

// dropFirst와 dropLast
let dropFirstNumbers = numbers.dropFirst()
let dropLastNumbers = numbers.dropLast()

print(dropFirstNumbers) // [2, 3, 4, 5]
print(dropLastNumbers)  // [1, 2, 3, 4]

// prefix와 suffix
let prefixNumbers = numbers.prefix(3)
let suffixNumbers = numbers.suffix(2)

print(prefixNumbers) // [1, 2, 3]
print(suffixNumbers) // [4, 5]

// swapAt
var mutableNumbers = [1, 2, 3, 4, 5]
mutableNumbers.swapAt(0, 4)
print(mutableNumbers) // [5, 2, 3, 4, 1]

// shuffled
let shuffledNumbers = numbers.shuffled()
print(shuffledNumbers) // 무작위로 섞인 배열 (예: [3, 1, 5, 4, 2])

// sorted(by:)
let sortedNumbersByDescending = numbers.sorted(by: >)
print(sortedNumbersByDescending) // [5, 4, 3, 2, 1]

// reversed
let reversedNumbers = numbers.reversed()
print(Array(reversedNumbers)) // [5, 4, 3, 2, 1]

// compactMap
let optionalNumbers: [Int?] = [1, 2, nil, 4, nil, 5]
let nonOptionalNumbers = optionalNumbers.compactMap { $0 }
print(nonOptionalNumbers) // [1, 2, 4, 5]

// flatMap
let arrayOfArrays = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
let flatArray = arrayOfArrays.flatMap { $0 }
print(flatArray) // [1, 2, 3, 4, 5, 6, 7, 8, 9]

// partition(by:)
var numbersForPartition = [10, 1, 2, 3, 9]
let partitionIndex = numbersForPartition.partition(by: { $0 >= 3 })
print(numbersForPartition) // [1, 2, 3, 9, 10] 또는 다른 순서
print(partitionIndex)  // 2 (첫 번째 만족하는 요소의 인덱스)

// indices
let arrayIndices = numbers.indices
for index in arrayIndices {
    print("Index \(index): \(numbers[index])")
}

그 외 유용한 메서드

  1. count:

    • 배열 요소의 개수를 반환합니다.
    let elements = [1, 2, 3]
    print(elements.count) // 3
  2. isEmpty:

    • 배열이 비어 있는지 확인합니다.
    let emptyArray: [Int] = []
    print(emptyArray.isEmpty) // true
  1. contains:

    • 배열에 특정 요소가 포함되어 있는지 확인합니다.
    let elements = [1, 2, 3]
    print(elements.contains(2)) // true
  2. firstlast:

    • 배열의 첫 번째와 마지막 요소를 반환합니다.
    let elements = [1, 2, 3]
    print(elements.first) // Optional(1)
    print(elements.last) // Optional(3)
  3. reduce:

  • 배열의 모든 요소를 결합하여 단일 값을 생성합니다.
    let numbers = [1, 2, 3, 4, 5]
    let sum = numbers.reduce(0, +)
    print(sum) // 15
  1. capacity:
    • 배열의 내부 저장 공간을 확인합니다. 이는 성능 최적화에 유용할 수 있습니다.
    var array = [Int]()
    array.reserveCapacity(10)
    print(array.capacity) // 최소한 10
profile
우리는 무엇이든 될 수 있어

0개의 댓글