상수 기본 사용
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)
}
'Swift > 문법' 카테고리의 다른 글
[SWIFT]UnsafeMutablePointer<AudioBufferList> to AVAudioPCMBuffer (0) | 2023.07.25 |
---|---|
[SWIFT]Tuples (0) | 2023.07.25 |
[SWIFT]알고리즘 별 해시값 생성 (MD2,4,5/SHA) (0) | 2023.07.24 |
[SWIFT]String -> Data, Data -> String 변환 (0) | 2023.07.20 |
[SWIFT]문자열 String 관련 함수들 (0) | 2023.07.13 |