상수 기본 사용 

let arrayOfInts = [2, 4, 7]

 

컴파일러는 일반적으로 리터럴의 요소를 기반으로 배열의 유형을 유추할 수 있지만 명시적 유형 주석은 기본값을 재정의할 수 있습니다.

 

let arrayOfUInt8s: [UInt8] = [2, 4, 7]   // type annotation on the variable
let arrayOfUInt8s = [2, 4, 7] as [UInt8] // type annotation on the initializer expression
let arrayOfUInt8s = [2 as UInt8, 4, 7]   // explicit for one element, inferred for the others

 

배열 100개의 요소를 0으로 채웁니다.

var arrayOfStrings = Array(repeating: 0,count: 100)

 

두 개의 큐를 매우 빠른속도로 더해줍니다.

import Accelerate  	//vDSP를 사용하기 위해 import 해줍니다.

private var queues: [[Float]] = []

....... 생략 ........

// 두개의 큐 배열의 길이가 다를 경우 길이를 맞춰줍니다.
if queues[1].count < count {
	sum = count - queues[1].count
	queues[1] += Array(repeating: Float(0), count: sum)
}

// 큐의 동일한 크기로 읽어 들입니다.
let samples1 = queues[0][0...count - 1]
let samples2 = queues[1][0...count - 1]
            
//vDSP add 함수를 이용해서 두 배열을 빠르게 더해줍니다.
let queue_buffer = vDSP.add(samples1, samples2)

// 사용한 큐를 지워줍니다.
queues[0].removeSubrange(0...count - 1)
queues[1].removeSubrange(0...count - 1)

 

[flatMap] 

다중 배열을 하나의 배열로 변경합니다.

let array2D = [[1, 3], [4], [6, 8, 10], [11]]

let flattenedArray = array2D.flatMap { $0 }
print(flattenedArray) // [1, 3, 4, 6, 8, 10, 11]

배열에서 Int 타입케스팅에 성공한 값만 가져옵니다.

 

let strings = ["1", "foo", "3", "4", "bar", "6"]
let numbersThatCanBeConverted = strings.flatMap { Int($0) }
print(numbersThatCanBeConverted) // [1, 3, 4, 6]

 

[Range]

Range를 이용해서 원하는 범위는 값만 배열에서 추출 합니다.

 

let words = ["Hey", "Hello", "Bonjour", "Welcome", "Hi", "Hola"]
let range = 2...4
let slice = words[range] // ["Bonjour", "Welcome", "Hi"]

 

[Remove]

요소 삭제 하기

 

extension Array where Element: Equatable {
    mutating func remove(_ element: Element) {
        _ = firstIndex(of: element).flatMap {
            self.remove(at: $0)
        }
    }
}

 

var array = ["abc", "lmn", "pqr", "stu", "xyz"]
array.remove("lmn")
print("\(array)")    //["abc", "pqr", "stu", "xyz"]

[Sort]

기본 정렬 방식

var mutableWords = ["Hello", "Bonjour", "Salute", "Ahola"]
mutableWords.sort()
print(mutableWords) // ["Ahola", "Bonjour", "Hello", "Salute"]

정렬을 위한 인수로 클로저를 전달할 수 있습니다.

let words = ["Hello", "Bonjour", "Salute", "Ahola"]
let sortedWords = words.sorted(isOrderedBefore: { $0 > $1 })
print(sortedWords) // ["Salute", "Hello", "Bonjour", "Ahola"]

후행 클로저가 있는 대체 구문:

let words = ["Hello", "Bonjour", "Salute", "Ahola"]
let sortedWords = words.sorted() { $0 > $1 }
print(sortedWords) // ["Salute", "Hello", "Bonjour", "Ahola"]

이 문제를 해결하려면 요소의 소문자 버전을 기준으로 정렬합니다.

let words = ["Hello", "bonjour", "Salute", "ahola"]
let sortedWords = words.sorted { $0.lowercased() < $1.lowercased() }
print(sortedWords) // ["ahola", "bonjour", "Hello", "Salute"]

또는

let words = ["Hello", "bonjour", "Salute", "ahola"]
let sortedWords = words.sorted { $0.caseInsensitiveCompare($1) == .orderedAscending }
print(sortedWords) // ["ahola", "bonjour", "Hello", "Salute"]

포함된 숫자 값을 기준으로 문자열을 올바르게 정렬하려면 .numeric 옵션과 비교를 사용하십시오.

let files = ["File-42.txt", "File-01.txt", "File-5.txt", "File-007.txt", "File-10.txt"]
let sortedFiles = files.sorted() { $0.compare($1, options: .numeric) == .orderedAscending } 
print(sortedFiles) // ["File-01.txt", "File-5.txt", "File-007.txt", "File-10.txt", "File-42.txt"]

Int 배열에서 최소값, 최대값을 구합니다.

let numbers = [2, 6, 1, 25, 13, 7, 9]
let minimumNumber = numbers.min() // Optional(1)
let maximumNumber = numbers.max() // Optional(25)

 

[배열의 값 수정]

요소를 추가 하고 두개의 배열을 합칩니다.

var exampleArray = [1,2,3,4,5]
exampleArray.append(6)
//exampleArray = [1, 2, 3, 4, 5, 6]

var sixOnwards = [7,8,9,10]
exampleArray += sixOnwards
//exampleArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

배열에서 값 제거

exampleArray.removeAtIndex(3)
//exampleArray = [1, 2, 3, 5, 6, 7, 8, 9, 10]

exampleArray.removeLast()
//exampleArray = [1, 2, 3, 5, 6, 7, 8, 9]

exampleArray.removeFirst()
//exampleArray = [2, 3, 5, 6, 7, 8, 9]

 

[ZIP]

zip 함수는 SequenceType 유형의 매개변수 2개를 허용하고 각 요소가 첫 번째 시퀀스의 값과 두 번째 시퀀스의 값을 포함하는 Zip2Sequence를 반환합니다.

 

let nums = [1, 2, 3]
let animals = ["Dog", "Cat", "Tiger"]
let numsAndAnimals = zip(nums, animals)

 

sequence1 sequence1

        1            "Dog"

        2            "Cat"

        3            "Tiger"

list1에 있는 각 값이 list0에 있는 관련 값의 두 배인지 확인하려고 합니다.

let list0 = [0, 2, 4]
let list1 = [0, 4, 8]

let list1HasDoubleOfList0 = !zip(list0, list1).filter { $0 != (2 * $1)}.isEmpty

 

[배열 항목 섞기와 무작위로 가져오기]

// shuffled() 메서드를 호출하면 항목의 순서가 무작위로 섞인 새로운 배열이 반환된다.
let shuffledArray = array.shuffled()

// randomElement() 메서를 호출하면 배열의 항목을 무작위로 선택하며 반환된다.
let rnadomArray = array.randomElement()

 

[배열 반복하기]

 

let array = ["apple", "banana", "orange"]

for f in array {
	print(f)
}

array.forEach { f in
	print(f)
}

array.forEach {
	print($0)
}

+ Recent posts