티스토리 뷰

Swift

Swift3 ) Array사용해보기 (2/2)

Zedd0202 2017. 7. 2. 17:18
반응형

이전글에 이어서 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]


 

2. 배열 오름차순정렬(배열리턴) sorted()


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

도움이 되었으면 좋겠습니닷




반응형