공부/SWIFT

[SWIFT] 컬렉션형 - 배열 (Array)

알로하리미 2021. 3. 9. 12:59
728x90

1. 개요

- 같은 타입의 데이터를 일렬로 나열한 후 순서대로 저장하는 형태의 컬렉션 타입
- 같은 값 이여도 할당된다.
- let키워드 사용시 변경 할 수 없는 배열로 선언된다.
- var키워드 사용시 변경 할 수 있는 배열로 선언된다..
- 대괄호[ ] 묶어 Array타입임을 표현 할 수 있다.
- isEmpty 프로퍼티로 비어있는 배열인지 확인해 볼 수 있다.
- count 프로퍼티로 몇개의 요소가 존재 하는 지 확인 할 수 있다.
- 필요에 따라 자동으로 크기를 조절해주므로 요소의 삽입및 삭제가 자유롭다.

 

2. 배열의 선언

//Swift를 사용하면 배열 리터럴을 사용하여 코드에서 배열을 쉽게 만들 수 있습니다
// An array of 'Int' elements
let oddNumbers = [1, 3, 5, 7, 9, 11, 13, 15]

// An array of 'String' elements
let streets = ["Albemarle", "Brandywine", "Chesapeake"]


//Element선언에서 배열 유형을 지정하여 빈 배열을 만들 수 있습니다
var emptyDoubles: [Double] = []
var emptyFloats: Array<Float> = Array()


//고정 된 수의 기본값으로 사전 초기화 된 배열이 필요한 경우 이니셜 라이저를 사용
var digitCounts = Array(repeating: 0, count: 10)
print(digitCounts)
// Prints "[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]"

 

3. 배열 값 접근

배열의 모든 요소에 대해 작업을 수행해야하는 경우 for- in루프를 사용

for street in streets {
    print("I don't live on \(street).")
}
// Prints "I don't live on Albemarle."
// Prints "I don't live on Brandywine."
// Prints "I don't live on Chesapeake."

 

속성을 사용하여 배열에 요소가 있는지 빠르게 확인하거나(isEmpty) 

속성을 사용 하여 배열의 요소 수(.count)를 찾습니다

if oddNumbers.isEmpty { //oddNubers배열이 비었으면 true
    print("I don't know any odd numbers.")
} else {
    print("I know \(oddNumbers.count) odd numbers.")
}
// Prints "I know 8 odd numbers."

 

배열의 첫 번째 및 마지막 요소 값에 안전하게 액세스 하려면 first및 last속성을 사용하십시오 . 배열이 비어있는 경우 이러한 속성은 nil입니다.

//oddNubers배열의 첫번째, 마지막 문자에 접근하여 존재하면 print 문을 실행
if let firstElement = oddNumbers.first, let lastElement = oddNumbers.last {
    print(firstElement, lastElement, separator: ", ") // Prints "1, 15"
}


//emptyDoubles 첫번째, 마지막 을 ,로 이어서 print하라.
print(emptyDoubles.first, emptyDoubles.last, separator: ", ") // Prints "nil, nil"

 

첨자를 통해 개별 배열 요소에 액세스 할 수 있습니다

print(oddNumbers[0], oddNumbers[3], separator: ", ")
// Prints "1, 7"

print(emptyDoubles[0])
//음수 또는 카운트보다 크거나 없는 색인을 사용하면 런타임 오류가 발생

 

 

4. 요소 추가 및 제거

var students = ["Ben", "Ivy", "Jordell"]

//배열끝에 요소추가
//'단일' 요소를 추가 append(_:)
//'여러' 요소를 추가 append(contentsOf:)
students.append("Maxime")
students.append(contentsOf: ["Shakia", "William"]) 
// ["Ben", "Ivy", "Jordell", "Maxime", "Shakia", "William"]


//배열 중간에 새 요소를 추가 (해당 인덱스 및 이후 인덱스의 요소는 공간을 확보하기 위해 다시 이동)
//단일 insert(_:at:)
//여러 insert(contentsOf:at:)
students.insert("Liam", at: 3) 
// ["Ben", "Ivy", "Jordell", "Liam", "Maxime", "Shakia", "William"]


//배열의 요소를 제거
//첫번째 요소 제거 removeFist()
//지정된 위치 요소 제거 remove(at:)
//지정된 범위 제거 removeSubrange(_:) ex) .removeSubrange(1..<4) index 1에서 3까지 제거
//마지막 요소 제거 removeLast()
students.remove(at: 0) 
// ["Ivy", "Jordell", "Liam", "Maxime", "Shakia", "William"]
students.removeLast() 
// ["Ivy", "Jordell", "Liam", "Maxime", "Shakia"]


//기존값을 변경
if let i = students.firstIndex(of: "Maxime") { 
//Maxime이라는 값을 갖고 있고 처음으로 걸린 위치의 값을 변경
    students[i] = "Max"
}
// ["Ivy", "Jordell", "Liam", "Max", "Shakia"]