스위프트 문법 10 (Array)

스위프트 문법 10 (Array)

- 9 mins

Array (배열)

배열도 다른 일반적인 변수들과 같이 var로 선언하면 수정할 수 있고, let으로 선언하면 수정할 수 없다.

var variableArray = [1, 2]
variableArray = []

let constantArray = [1, 2]
constantArray = []        //오류!!!!!


배열에는 선언한 모든 타입을 담을 수 있다.

var Array1 = [1, 2]           //Int형 배열
var Array2 = ["1", "2"]       //String형 배열
var Array3 = [1.2, 2.1]       //Double형 배열

//정해진 타입이 아니라 모든 타입을 넣을 수 있는 Any형 배열이 있는데 나중에 다루겠다.


배열을 선언하는 방법은 아래와 같다.

let strArray1: Array<String> = ["apple", "orange", "melon"]
let strArray2: [String] = ["apple", "orange", "melon"]
let strArray3 = ["apple", "orange", "melon"]

//(repeating: "iOS", count: 5)를 이용해 ios라는 String값을 5개 저장 한다.
let strArray4 = Array<String>(repeating: "iOS", count: 5)


비어있는 배열을 선언하려면 반드시 타입을 지정해줘야 한다.

let emptyArray: [String] = []


배열 내의 Value수를 count하기 위해서는 .count를 이용하면 된다.

let fruits = ["Apple", "Orange", "Banana"]
let countOfFruits = fruits.count


Retrieve an Element

            0        1         2
fruits = ["Apple", "Orange", "Banana"]

fruits[0]       //Apple
fruits[2]       //Banana
fruits[0...2]   //["Apple", "Orange", "Banana"]
fruits[0..<3]   //["Apple", "Orange", "Banana"]
//fruits[123]   //123 index가 없기때문에 오류가 난다.

fruits.startIndex //0
fruits.endIndex   //3

fruits[fruits.startIndex]   //Apple
fruits[fruits.endIndex - 1] //Banana


fruits.startIndex == 0     //true
fruits.endIndex - 1 == 2   //true


Searching

Array에 찾는 값이 있는지 찾을때 .contains을, 원하는 값이 어디있는지 찾을때는 .index(of: )를 사용하면 된다

let alphabet = ["A", "B", "C", "D", "E"]

//.contains를 이용해 "A"가 있는지 확인
if alphabet.contains("A") {
  print("contains A")
}

if alphabet.contains(where: { str -> Bool in
  // code...
  return str == "A"
}) {
  print("contains A")
}

//.index(of: )를 이용해 "D"의 인덱스 값을 찾았다. 
if let index = alphabet.index(of: "D") {
  print("index of D: \(index)")
}


Add a new Element

배열에 새로운 값을 추가하고 싶을때는 .append 혹은 더하기(+)를 이용하면 된다. 새로운 값을 원하는 index위치에 추가하고 싶을때는 .insert(값, at: index위치)를 이용하면 된다.

var alphabetArray = ["A"]

alphabetArray.append("B")
//alphabetArray.append(1) //당연히 맞지 않는 타입을 넣으면 오류가 난다.
alphabetArray += ["C"]

var alphabetArray2 = ["Q", "W", "E"]
alphabetArray + alphabetArray2  //이렇게 두개의 배열을 합칠 수 있다.

alphabetArray.insert("S", at: 0)
alphabetArray.insert("F", at: 3)


Change an Existing Element

배열의 값을 변경하고 싶다면 변경을 희망하는 값의 인덱스를 입력하고 일반 변수의 값을 변경하듯 =로 변경하면 된다.

alphabetArray = ["A", "B", "C"]
//값이 "A"였던 인덱스 0의 값을 "Z'로 변경
alphabetArray[0] = "Z"          //["Z", "B", "C"]

//아래와 같이 하면 원래 값들은 다 사라지고 덮어 씌울 수 있다.
alphabetArray = ["A", "B", "C"]

alphabetArray[alphabetArray.startIndex ..< alphabetArray.endIndex.advanced(by: -1)] = ["X", "Y"]

alphabetArray     //["X", "Y", "C"]

alphabetArray = ["A", "B", "C", "D", "E", "F"]
alphabetArray[2...] = ["Q", "W", "E", "R"]
alphabetArray


Remove an Element

배열에 원하는 index를 지우고 싶다면 .remove(at: index번호)를 이용하면 된다. 또, 배열 내 모든 값을 지우고 싶을때는 .removeAll()을 이용하면 지울 수 있다.

alphabetArray = ["A", "B", "C", "D", "E"]
//0번째 값을 지우고 지워진 값을 removed에 저장
let removed = alphabetArray.remove(at: 0)

removed             //"A"
alphabetArray       //["B", "C", "D", "E"]

alphabetArray.removeAll()
alphabetArray.removeAll(keepingCapacity: true)


// 응용, index 찾아 지우기

alphabetArray = ["A", "B", "C", "D", "E"]

let indexC = alphabetArray.index(of: "C")
alphabetArray.remove(at: indexC!)
alphabetArray


Sorting

처음 배열에 대한 글을 썻던것 처럼 배열은 순서가 있는 Collection Functions이다. 그렇기때문에 순서는 중요한데. 이러한 배열의 순서를 정렬하려면 .sort(), .sorted()를 이용하면 된다.
sort와 sorted의 차이

alphabetArray = ["A", "B", "C", "D", "E"]

//아래와 같이 배열 내 값들을 섞었다. 
for i in 0 ..< (alphabetArray.count - 1) {
  let j = Int(arc4random_uniform(UInt32(alphabetArray.count)))
  alphabetArray.swapAt(i, j)
}
alphabetArray //["D", "A", "E", "C", "B"]

var sortedArray = alphabetArray.sorted()
sortedArray           //["A", "B", "C", "D", "E"]
alphabetArray         //["D", "A", "E", "C", "B"]

alphabetArray.sort()  //["A", "B", "C", "D", "E"]
alphabetArray         //["A", "B", "C", "D", "E"]


// sort by closure syntax
// 아래와 같이 클로져를 이용해 원하는 규칙으로 정렬할 수도 있다.

sortedArray = alphabetArray.sorted { $0 > $1 }  
alphabetArray.sorted(by: >= )                   //["E", "D", "C", "B", "A"]
alphabetArray.sorted(by: <= )                   //["A", "B", "C", "D", "E"]
sortedArray                                     //["E", "D", "C", "B", "A"]


alphabetArray.sort { $0 > $1 }
alphabetArray                                   //["E", "D", "C", "B", "A"]


Enumerating an Array

let array = ["Apple", "Orange", "Melon"]

for value in array {
  if let index = array.index(of: value) {
    print("\(index) - \(value)")
  }
}

//출력 값
//0 - Apple
//1 - Orange
//2 - Melon


//반대로 열거
for value in array.reversed() {
  if let index = array.index(of: value) {
    print("\(index) - \(value)")
  }
}
//출력 값
//2 - Melon
//1 - Orange
//0 - Apple


for tuple in array.enumerated() {
  print("#\(tuple.0) - \(tuple.1)")
//  print("#\(tuple.offset) - \(tuple.element)")
}


for (index, word) in array.enumerated() {
  print("#\(index) - \(word)")
}

//출력 값
//#0 - Apple
//#1 - Orange
//#2 - Melon
comments powered by Disqus
rss facebook twitter github youtube mail spotify lastfm instagram linkedin google google-plus pinterest medium vimeo stackoverflow reddit quora quora