티스토리 뷰
이전글에 이어서 Swift에서 배열사용해보기 그 두번째 시간이 왔습니다 :)
바로 시작해볼게요.
Array(배열)
● 배열 값 수정
1. range를 주고 값 수정, 추가
저번시간에 이어서 배열 값을 수정하는 방법을 알아볼거에요.
var arr : Array<Int> = [1,2,3,4]
arr[1...2] // [2,3]
arr[1...2] = [5,6] //인덱스 1과 2의 값을 5와 6으로 수정.(배열은 인덱스 0부터 시작)
print(arr) //[1,5,6,4]
이렇게 원하는 인덱스 range를 설정해서 그 부분만 값을 바꿀 수 있어요. 심지어
var arr : Array<Int> = [1,2,3,4]
arr[1...2] // [2,3]
arr[1...2] = [5,6,7,8,9]
print(arr) //[1,5,6,7,8,4]
range 범위를 벗어나게 값을 추가해주어도 알아서 추가를 해준답니다 :)
2. insert( _:at:)를 통해 값 추가
insert! 이름만봐도 뭘 삽입하는거 같죠?
값을 삽입해봅시다.
var arr : Array<Int> = [1,2,3,4]
arr.insert(5, at: 4)//[1,2,3,4,5]
arr.insert(0, at: 0)//[0,1,2,3,4,5]
insert의 첫번째 파라미터에는 넣고싶은 값. at에는 그 값의 인덱스가 될 값을 넣어주면 된답니다. 이때 주의할 점은 뜬금없이 at에 5나 6이 들어가면 안된다는 거에요. out of range에러를 내게 됩니다. 주의하세요.
3. remove(at:)통해 값 제거
remove역시 이름에서 볼 수 있듯이 뭘 제거하는 메소드같네요 :)
맞습니다. 파라미터로 인덱스를 주게 되는데, 해당인덱스를 삭제해주죠.
var arr : Array<Int> = [1,2,3,4]
arr.insert(0, at: 0)//[0,1,2,3,4,5]
arr.remove(at: 0)
print(arr)//[1,2,3,4,5]
0번째 인덱스가 삭제된 것을 볼 수 있습니다.
arr.removeAll()
print(arr) //[]
removeAll메소드를 사용하면, 배열안에 있는 모든 값을 삭제해주게 됩니다.
이때도, 저번시간에 말씀드린것처럼 배열이 타입유추로 인해 생성된것이었으면
removeAll에의해 빈배열로 만들어지고, 처음에 넣었던 타입과 다른 타입을 넣게되면 오류가나게 됩니다.
var arr = [1,2,3,4]
arr.removeAll()
print(arr) //[]
arr.append("A") //error!
주의하세요 :-)
4. 첫번째 값을 제거하고싶으면 removeFirst()
var arr = [1,2,3,4,5]
arr.removeFirst()
print(arr) //[2,3,4,5]
5. 마지막값을 제거하고싶으면 popLast(), removeLast()
5-1. popLast()
var arr = [1,2,3,4,5]
arr.popLast()
print(arr) //[1,2,3,4]
arr.removeAll()
arr.popLast() //nil을 pop. 오류가 아님.
print(arr) //[]
빈 배열에 popLast하면 오류가 날 줄 알았는데, 안나더라구요 :)
5-2 removeLast()
var arr2 = [1,2,3,4,5]
arr2.removeLast()
print(arr2)//[1,2,3,4]
arr2.removeAll()
arr2.removeLast() //error! can't remove last element from an empty collection
역시..오류가 나는군요 ㄷㄷ
저는 popLast보다는 removeLast가 더 안전하지 않을까요? ㅎㅎ 저는 removeLast를 더 많이 쓸 것 같네요 :) popLast는 빈 배열에 대해서..nil을 반환하니까ㅎㅎ..
6. 첫번째값 또는 마지막값이 없는 배열을 리턴. dropFirst(), dropLast()
뭐라해야할지 모르겠어서 이렇게 말했는데, 예제를 보시면 바로 이해가 가실거에요 :)
var arr = [1,2,3,4,5]
arr.dropFirst() //[2,3,4,5]
arr.dropLast()//[1,2,3,4]
print(arr)//[1,2,3,4,5]
우리가 이때까지 했던건 원본 배열을 아예 수정?하는 그런 메소드들만 배웠죠? 그런데 dropFirst/Last는 정확히 말해서 "수정"의 개념과는 조금 다른 것 같아요. 정말 "배열"을 리턴해주거든요.
● 배열 값 접근
1. startIndex
var arr = [60,70,80,90,100]
arr.startIndex //0
print(arr[arr.startIndex]) //60
이렇게 사용할 수 있답니다.
2. endIndex
endIndex를 사용하실때에는 주의할 점이 있는데요,
var arr = [60,70,80,90,100]
arr.endIndex //5
print(arr[arr.endIndex]) //error! out of range
endIndex가 이 배열에서는 4여야 할 것 같잖아요? (인덱스가 0부터 시작하니까) 근데 endIndex를 하면 5가 나옵니다...왜인지는 모르겠지만..ㅎㅎ
그러니 주의하세요!
3. first/Last
위의 start/end Index와는 다르게 바로 값에 접근할 수 있게 도와주는 메소드에요 :)
var arr = [60,70,80,90,100]
arr.first //60
arr.last //100
4. 배열안에서의 최소값, 최대값 얻기 min()/max()
var arr = [60,70,80,90,100]
arr.min() //60
arr.max() //100
(이때까지 sort하고 최소값, 최대값 처리했었는데 ㅂㄷ)
^^그리고 min/max메소드는 배열안에 아무 값이 없다면 nil을 리턴합니다.
● 배열 변경
이제부터 해볼거는 배열의 "값"의 수정이 아닌, 배열의 속성?을 변경하는 방법이에요 :)
1. 배열 오름차순, 내림차순 정렬. sort()/reverse()
var arr = [40,10,20,80,100]
arr.sort()
print(arr)//[10,20,40,80,100]
arr.reverse()
print(arr)//[100,80,40,20,10]
var arr = [40,10,20,80,100]
arr.sorted() //[10,20,40,80,100]
print(arr)//[40,10,20,80,100]
위에서는 sort()로했었죠? sorted()는 또 뭐냐? sort()는 원본배열을 아예 정렬해버리는거에요. 하지만, sorted()는 현재 배열을 정렬해서 "배열"로 리턴해주긴 하지만, 위 예제에서 보시는 것 처럼 원본배열을 정렬이 되어있지 않습니다. ㅎㅎ 근데 왜 sorted()만 있냐? 왜 reversed()는 없냐?
reversed()는 있긴하지만.. 위처럼 내림차순으로 정렬된 배열을 리턴해주진 않아요 ㅎㅎ..
대신!
var arr = [40,10,20,80,100]
arr.sorted(by: >) //[100,80,40,20,10]
print(arr)//[40,10,20,80,100]
이렇게 내림차순 정렬을 리턴받을 수 있답니다.
sorted()외에도 위에서 말한 sort()/reverse()도 이렇게 쓸 수있는데요.
var arr = [40,10,20,80,100]
arr.sort(by: >)
print(arr)//[100,80,40,20,10]
이번엔 reverse()를 쓰지않고 sort()를 썼지만, 원본배열이 내림차순으로 정렬이 된 것을 볼 수 있죠?
자..이렇게 스위프트에서의 배열을 잠깐? 간단하게..?ㅎㅎ 훑어보았는데, 어떠신가요?
저는 배열에 유용한 메소드가 정말 많다는 것을 느꼈어요XD
도움이 되었으면 좋겠습니닷
'Swift' 카테고리의 다른 글
Swift3 ) Collection - Dictionary사용해보기 (5) | 2017.07.12 |
---|---|
Swift3 ) How to convert string to an array in Swift ( 문자열을 배열로 바꾸는 방법) (2) | 2017.07.10 |
Swift3 ) Array사용해보기(1/2) (0) | 2017.07.01 |
Swift3 ) 1152 단어의 개수/ components와 split의 차이 (0) | 2017.06.21 |
Swift ) print시 newline으로 안하는 법. (separator, terminator) (0) | 2017.06.14 |
- iOS delegate
- swift 공부
- Swift
- IOS
- np-hard
- swift sort
- WidgetKit
- swift array
- swift delegate
- Accessibility
- 스위프트 문법
- FLUTTER
- 제이슨 파싱
- Git
- actor
- fastlane
- WWDC
- ios 13
- 피아노
- WKWebView
- swift3
- github
- Xcode
- 회고
- UIBezierPath
- SwiftUI
- np-complete
- Combine
- 스위프트
- swift tutorial
- Total
- Today
- Yesterday