본문 바로가기
Smart Device/Swift

Swift Array #2

by 언덕너머에 2014. 6. 11.

- Algorithms

* sort(_:)

  주어진 closure에 따른 배열의 순서를 결정한다.

  func sort(isOrderedBefore: (T, T) -> Bool


  예)

  let array = [3, 2, 5, 1, 4]

  array.sort { $0 < $1 }

  // array is [1, 2, 3, 4, 5]

 

  array.sort { $1 < $0 }

  // array is [5, 4, 3, 2, 1]


* reverse() -> Array<T>

  배열의 인덱스를 역순으로 배열을 반환한다.

  func reverse() -> Array<T>


  예)

  let array = [1, 2, 3, 4, 5]

  let reversedArray = array.reverse()

  // reversedArray = [5, 4, 3, 2, 1]


* filter(_ :) -> Array<T>

  주어진 closure의 조건을 포함하는 요소들의 배열을 리턴한다.

  func filter(includeElement: (T) -> Bool) -> Array<T>


  예)

  let array = [0, 1, 2, 3, 4, 5, 6, 7]

  let filteredArray = array.filter { $0 % 2 == 0 }

  // filteredArray is [0, 2, 4, 6]


* map<U>(_ :) -> Array<U>

  각 요소의 값을 변형하기 위해 주어진 closure를 적용한 결과 배열을 리턴한다.

  func map<U>(transform: (T) -> U) -> Array<U>


  예)

  let array = [0, 1, 2, 3]

  let multipliedArray = array.map { $0 * 2 }

  // multipliedArray is [0, 2, 4, 6]

 

  let describedArray = array.map { "Number: \($0)" }

  // describedArray is [Number: 0, Number: 1, Number: 2, Number: 3]


* reduce<U>(_:, combine: (U, T)->U) -> U

  각 요소에 reduction closure를 적용한 결과를 단일값으로 리턴한다.

  func reduce<U>(initial: U, combine: (U, T) -> U) -> U


  예)

  let array = [1, 2, 3, 4, 5]

  let addResult = array.reduce(0) { $0 + $1 }

  // addResult is 15

  // 초기값은 0

 

  let multiplyResult = array.reduce(1) { $0 * $1 }

  // multiplyResult is 120

  // 초기값 1


- Operators

* +=

  기존 배열에 요소나 요소의 열을 추가한다.

  @assignment func += <U>(inout lhs: Array<T>, rhs: U)


  예)

  var array = [0, 1, 2]

  array += 3

  // array is [0, 1, 2, 3]

 

  array += [4, 5, 6]

  // array is [0, 1, 2, 3, 4, 5, 6]


  추가될 요소의 type은 기존 type과 일치해야 한다.

  다음 구문은 오류를 발생시킨다.

  array += "hello"

  // Error: could not find an overload for '+=' that accepts the supplied arguments


  변수가 아닌 상수에 배열을 추가하게 되면 다음과 같은 오류가 발생한다.

  let array = [0, 1, 2]

  array += 3

  // Error: could not find an overload for '+=' that accepts the supplied arguments


- 다중 배열(Multidimensional Array)

* 정적 배열선언

  var myFirstMultiArray : [[Int]] = [[1,2,3,4], [5,6,7,8], [9,10,11,12], [13,14,15,16]]

  println(myFirstMultiArray) // [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]]


 * 동적 배열선언

   var mySecondMultiArray = Array<Array<Int>>()

   var value = 1


   for column in 0 ... 3 {

       var columnArray = Array<Int>()

       for row in 0 ... 3 {

           columnArray.append(value++)

       }

       mySecondMultiArray.append(columnArray)

   }


   for i = 0; i < 4; i++ {

       for j = 0; j < 4; j++ {

           print("\(mySecondMultiArray[i][j])" + "\t")

       }

       println()

   }


'Smart Device > Swift' 카테고리의 다른 글

Swift Numeric Types  (0) 2014.06.12
Swift Dictionary  (0) 2014.06.12
Swift Array #1  (0) 2014.06.11
Swift String  (0) 2014.06.11
Swift Subscript  (0) 2014.06.11