적당한 고통은 희열이다

- 댄 브라운 '다빈치 코드' 중에서

Algorithm/참고

[Swift] Array 배열 관련 함수들

hongssup_ 2022. 1. 6. 01:08
반응형

초기화 및 선언

배열을 선언할 때

선언과 동시에 값을 넣어 초기화 해줄 때에는, 타입을 따로 명시해주지 않아도 요소들의 타입에 따라 자동으로 타입 추론이 이루어진다. 

var numArr = [1,2,3,4,5]
var strArr = ["hong", "ssup"]

하지만 빈 배열을 선언할 때에는 다음과 같이 타입을 반드시 명시해 주어야 한다. 

그렇지 않으면 Empty collection literal requires an explicit type 이라는 에러가 뜬다. 

var emptyStrings = [String]()
var emptyInts: [Int] = []
var emptyArr: [Any] = []

또한 한 배열에 여러가지 자료형 요소들을 넣고 싶다면 explicit type annotation, 즉 Any 타입을 반드시 선언해주어야 한다. 

var anyArr:[Any] = [1,2,"hong"]
var anyArr = [1,2,"hong"] as [Any]

연속된 숫자 배열 선언하기

var intArr = var intArr = Array<Int>(1...10) //[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

반복되는 값들로 선언하기

var repArr = Array(repeating: 0, count: 10) //[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
var repStrArr = [String](repeating: "냠", count: 10) //["냠", "냠", "냠", "냠", "냠", "냠", "냠", "냠", "냠", "냠"]

 

 

값 추가

append(_:) 배열의 맨 뒤에 값 추가 O(1)

 

append(contentsOf:) 배열 뒤에 여러 요소들을 한꺼번에 추가 += 연산자도 사용 가능

insert(_:at:) 특정 위치에 값 삽입 O(n)

insert(contentsOf:at:) 특정 위치에 여러 요소들을 한꺼번에 삽입

 

값 제거 

remove(at:) 원하는 값의 index로 제거 및 반환 Removes and returns the element at the specified position. O(n)

mutating func remove(at index: Int) -> Element

removeFirst() 첫번째 요소 제거 및 리턴 Removes and returns the first element of the collection. O(n)

removeLast() 마지막 요소 제거 및 리턴

The collection must not be empty. O(1)

mutating func removeFirst() -> Element
mutating func removeLast() -> Element

()안에 인자 값을 넣으면 배열의 맨 앞 또는 맨 뒤에서부터 해당 인자만큼 점프한 인덱스 값을 지우겠다는 의미

var numbers [1,2,3,4,5]
numbers.removeFirst(2) //3 제거 = numbers.remove(at:2)와 같은 표현
numbers.removeLast(1) //5 제거 = numbers.remove(at: numbers.count-2)와 같은 표현
print(numbers) //[1,2,4]

 

popLast() 마지막 값(optional)을 반환하면서 마지막 값을 제거. O(1)

mutating func popLast() -> Element?

빈 배열일 경우 nil을 반환하며 에러는 발생하지 않는다. 

 

removeAll() 모든 요소 제거. 빈 배열 만들기 O(n)

removeSubrange(_:) 제거하고 싶은 인덱스 범위로 일부 구간을 제거 O(n)

var numbers = [1,2,3,4,5]
numbers.removeSubrange(1..<4) //index 1,2,3 범위의 값을 제거
print(numbers) //[1,5]

 

dropFirst(_:), dropLast(_:) 을 사용하면 기존 배열은 그대로 두고, 배열의 앞 뒤에서 원하는 만큼 값을 제거한 새로운 배열을 반환한다. O(1) 혹은 O(k)

let numbers = [1,2,3,4,5]
print(numbers.dropFirst(2)) //[3,4,5] 앞에서부터 2개 제거한 새로운 배열 반환
print(numbers.dropFirst(10) //[] 새로운 빈 배열 반환
print(numbers) //[1,2,3,4,5] 기존 배열은 그대로

단, 이 메서드들은 ArraySlice<Element> 형식으로 반환이 되므로, 값을 사용할 때 다음과 같이 다시 배열로 변환해주어 사용할 수 있다. 

numbers = Array(numbers.dropLast(3))

 

값 포함 확인

특정 값을 포함하고 있는지 확인하기 위해서 두가지 방법이 있다. 

원하는 값을 찾아 그 값의 index를 받아오고 싶으면 firstIndex(of:)

단순히 특정 값의 포함 여부만 알고 싶다면 contains() 메서드를 사용하면 된다. 

firstIndex(of:) 배열에서 특정 값을 찾으면 처음 찾은 항목의 index를 반환하고, 찾지 못하면 nil을 반환 O(n)

contains() 배열 안에 특정 값이 포함되어 있는지 없는지 판단하여 Bool 값을 반환. O(n)

var num = [1,2,3,4]
num.contains(4)  //true
num.contains(5)  //false
num.firstIndex(of: 4)  //3
num.firstIndex(of: 5)  //nil

num.index(of: )는 deprecated 되었다고 한다. 

 

값 확인

.first 혹은 .last 는 해당 배열의 처음 or 마지막 인자를 반환한다. 빈 배열일 경우 nil을 반환하는 옵셔널.  

Reordering an Array's Elements

sort() mutable한 원본 배열의 값을 변경하여 정렬. O(n log n)

내림차순으로 정렬할 때는 .sort(by: >)

mutating func sort()

sorted() 배열을 정렬한 사본을 리턴. O(n log n)

내림차순으로 정렬할 때는 .sorted(by: >)

func sorted() -> [Element]

reverse() O(n)

Reverses the elements of the collection in place.

mutating func reverse()

reversed() O(1)

Returns a view presenting the elements of the collection in reverse order.

func reversed() -> ReversedCollection<Array<Element>>
//.sort() 원본 배열을 그대로 정렬
array.sort()
//.sorted() 정렬된 배열을 리턴
let sortedArray = array.sorted() 
//.reverse() 거꾸로
array.reverse()
//.reversed() 형변환 해서 사용해야
let reversedWord = String(word.reversed())
print(reversedWord)

 

 

 

참고 : 슈프림

728x90
반응형

'Algorithm > 참고' 카테고리의 다른 글

[Swift] 2진수 변환 radix  (0) 2022.02.09
[Swift] reversed()  (1) 2022.01.16
[Swift] String 문자열 다루기  (2) 2022.01.10
Swift 정규식 NSRegularExpression  (0) 2022.01.04
[Swift iOS] Dictionary 사용법 + dictionaries inside array  (0) 2021.09.10