swift 5関数とCollection
記事の目次、関数 1.Fnc宣言機能を使用する: .複数の戻り値 を返す..可変パラメータ .関数の内部に関数 を埋め込むことができます..関数の戻り値は、関数 とすることができる..関数パラメータは、関数 でありうる..クローズドを{}で作成する .クローズドの他の書き方 、コレクション 1.Aray 1.1空き行列を作成します. 1.2用[]定義配列
1.3は1つの配列を作成し、配列の初期値 である. 1.4配列スプライス 1.5使用.count対配列カウント 1.6使用.isEmpty判定配列が空かどうか 1.7 appndを使用して要素を追加する 1.8配列インデックス 1.9一括補正 1.10挿入要素 1.11要素を除去する 1.12エルゴード配列 .セット 2.1空きセットを作成する 2.2挿入要素 2.3セット初期化、自動推定タイプおよびいくつかの一般関数 2.4セットは を巡回しました. 2.5並べ替え 2.6セット演算 2.7セットの間の関係
.Dictionary 3.1辞書と割当値 を作成する. 3.2常用関数 3.3エルゴード (コードがハイライトされていないようです.このマークダウンの問題です.)
一、関数
1.func宣言関数を使う:
4.関数の内部に関数を埋め込むことができます.
4.関数の戻り値は、関数としても良いです.
標準出力:
下のmapとsort
1.アラy
1.1空の配列を作成します.
異なるタイプの配列は、IntとDoubleのようなスティッチングできません.
1.5使用.count対配列数
1.7 appndを使用して要素を追加する
1.8配列インデックス
2.1空セットを作成する
標準出力:
3.1辞書と割賦を作成する
3.3遍歴
一、関数
1.func宣言関数を使う:
func greet(name: String, day: String) -> String {
return "Hello \(name), today is \(day)."
}
greet(name: "Bob", day: "Tuesday")
標準出力:Hello Bob, today is Tuesday.
2.複数の戻り値を返します.func calculateStatistics(scores: [Int]) -> (min: Int, max: Int, sum: Int) {
var min = scores[0]
var max = scores[0]
var sum = 0
for score in scores {
if score > max {
max = score
} else if score < min {
min = score
}
sum += score
}
return (min, max, sum)
}
let statistics = calculateStatistics(scores: [5, 3, 100, 3, 9])
print(statistics.sum)
print(statistics.2)
print(statistics.min)
標準出力:120
120
3
3.可変パラメータfunc sumOf(numbers: Int...) -> Int {
var sum = 0
for number in numbers {
sum += number
}
return sum
}
print(sumOf())
print(sumOf(numbers: 2, 1, 3))
標準出力:0
6
パラメータは配列ではなく、複数のIntのみです.4.関数の内部に関数を埋め込むことができます.
func returnFifteen() -> Int {
var y = 10
func add() {
y += 5
}
add()
return y
}
print(returnFifteen())
標準出力:15
埋め込み関数は、外部関数の変数を使用できます.4.関数の戻り値は、関数としても良いです.
func makeIncrementer() -> ((Int) -> Int) {
func addOne(number: Int) -> Int {
return 1 + number
}
return addOne
}
var increment = makeIncrementer()
print(increment(7))
標準出力:8
5.関数のパラメータは、関数であることができます.func hasAnyMatches(list: [Int], condition: (Int) -> Bool) -> Bool {
for item in list {
if condition(item) {
return true
}
}
return false
}
func lessThanTen(number: Int) -> Bool {
return number < 10
}
var numbers = [20, 19, 7, 12]
print(hasAnyMatches(list: numbers, condition: lessThanTen))
標準出力:true
6.{}でクローズドを作成するvar numbers = [20, 19, 7, 12]
print(numbers.map({
(number: Int) -> Int in
let result = 3 * number
return result
}))
print(numbers)
パラメータと関数体をinゾーンで分ける標準出力:
[60, 57, 21, 36]
[20, 19, 7, 12]
7.クローズドの他の書き方下のmapとsort
var numbers = [20, 19, 7, 12]
let mappedNumbers = numbers.map({ number in 3 * number })
print(mappedNumbers)
let sortedNumbers = numbers.sort{ $0 > $1 }
print(sortedNumbers)
print(numbers)
[60, 57, 21, 36]
()
[20, 19, 12, 7]
二、コレクション1.アラy
1.1空の配列を作成します.
var someInts = [Int]()
print(someInts.count)
let someInts2 = [Int]()
print(someInts2.count)
標準出力:0
0
letで宣言するタイプはすべて可変ではなく、対象メモリアドレスは固定されています.var someInts = [Int]()
print(someInts.count)
let someInts2 = [Int]()
print(someInts2.count)
someInts.append(2)
someInts2.append(2)
コンパイルエラー:Main.swift:7:11: error: cannot use mutating member on immutable value: 'someInts2' is a 'let' constant
someInts2.append(2)
~~~~~~~~~ ^
Main.swift:3:1: note: change 'let' to 'var' to make it mutable
let someInts2 = [Int]()
^~~
var
1.2[]で配列を定義するvar shopList: [String] = ["egg", "potato", "milk"]
print(shopList)
標準出力:["egg", "potato", "milk"]
var shopList: [String]? = ["egg", "potato", "milk"]
print(shopList)
標準出力:Optional(["egg", "potato", "milk"])
配列要素が一つのタイプの場合、例えばStringであれば、swiftはこの配列タイプをStringとして自動的に認識します.var shopList = ["egg", "potato", "milk"]
print(shopList)
標準出力:["egg", "potato", "milk"]
1.3配列を作成し、配列の初期値を割り当てます.var Doubles = Array(repeating: 1.0, count: 10)
print("the Doubles are: \(Doubles)")
標準出力:the Doubles are: [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
1.4配列スティッチング異なるタイプの配列は、IntとDoubleのようなスティッチングできません.
var array1 = Array(repeating: 2.5, count: 3)
var array2 = [1, 2, 3, 4, 5]
var sumArray = array1 + array2
print(sumArray)
コンパイルエラー:Main.swift:3:25: error: cannot convert value of type '[Int]' to expected argument type 'Array'
var sumArray = array1 + array2
^
Main.swift:3:25: note: arguments to generic parameter 'Element' ('Int' and 'Double') are expected to be equal
var sumArray = array1 + array2
var array1 = Array(repeating: 2.5, count: 3)
var array2 = [1.0, 2, 3, 4, 5]
var sumArray = array1 + array2
print(sumArray)
標準出力:[2.5, 2.5, 2.5, 1.0, 2.0, 3.0, 4.0, 5.0]
+=を使って配列をつなぎ合わせることもできます.1.5使用.count対配列数
var shopList: [String]? = ["egg", "potato", "milk"]
print(shopList.count)
コンパイルエラー:Main.swift:2:7: error: value of optional type '[String]?' must be unwrapped to refer to member 'count' of wrapped base type '[String]'
print(shopList.count)
^
Main.swift:2:7: note: chain the optional using '?' to access member 'count' only for non-'nil' base values
print(shopList.count)
^
?
Main.swift:2:7: note: force-unwrap using '!' to abort execution if the optional value contains 'nil'
print(shopList.count)
^
!
var shopList: [String] = ["egg", "potato", "milk"]
print(shopList.count)
標準出力:3
1.6使用.isEmpty判定配列が空かどうか1.7 appndを使用して要素を追加する
1.8配列インデックス
var shopList: [String] = ["egg", "potato", "milk"]
shopList[0] = "apple"
print(shopList)
標準出力:["apple", "potato", "milk"]
var shopList: [String]? = ["egg", "potato", "milk"]
shopList[0] = "apple"
print(shopList)
コンパイルエラー:Main.swift:2:1: error: value of optional type '[String]?' must be unwrapped to refer to member 'subscript' of wrapped base type '[String]'
shopList[0] = "apple"
^
Main.swift:2:1: note: chain the optional using '?' to access member 'subscript' only for non-'nil' base values
shopList[0] = "apple"
^
?
Main.swift:2:1: note: force-unwrap using '!' to abort execution if the optional value contains 'nil'
shopList[0] = "apple"
^
!
Main.swift:3:7: warning: expression implicitly coerced from '[String]?' to 'Any'
print(shopList)
^~~~~~~~
Main.swift:3:7: note: provide a default value to avoid this warning
print(shopList)
^~~~~~~~
??
Main.swift:3:7: note: force-unwrap the value to avoid this warning
print(shopList)
^~~~~~~~
!
Main.swift:3:7: note: explicitly cast to 'Any' with 'as Any' to silence this warning
print(shopList)
^~~~~~~~
as Any
1.9一括修正var array = ["a", "b", "c", "d", "e"]
print(array)
array[1...3] = ["1", "2", "3"]
print(array)
標準出力:["a", "b", "c", "d", "e"]
["a", "1", "2", "3", "e"]
1.10要素を挿入するvar array = ["a", "b", "c", "d", "e"]
print(array)
array.insert("index", at: 1)
print(array)
["a", "b", "c", "d", "e"]
["a", "index", "b", "c", "d", "e"]
1.11要素を削除var array = ["a", "b", "c", "d", "e"]
print(array)
array.remove(at: 3)
print(array)
標準出力:["a", "b", "c", "d", "e"]
["a", "b", "c", "e"]
1.12エルゴード配列var array = ["a", "b", "c", "d", "e"]
for i in array{
print(i)
}
for(index, value) in array.enumerated(){
print("Element \(index + 1): \(value)")
}
標準出力:a
b
c
d
e
Element 1: a
Element 2: b
Element 3: c
Element 4: d
Element 5: e
2.セット2.1空セットを作成する
var letters = Set()
print(letters.count)
標準出力:0
2.2要素の挿入var letters = Set()
letters.insert("a")
print(letters)
letters = []
print(letters)
letters=[]はタイプを変えません.相変わらず集合です.配列ではありません.標準出力:
["a"]
[]
2.3セット初期化、自動推定タイプおよびいくつかの一般的な関数var words: Set = ["index", "elastic", "java", "python"]
print(words)
print(words.count)
print(words.isEmpty)
print(words.remove("java"))
print(words)
print(words.contains("python"))
標準出力:["elastic", "java", "index", "python"]
4
false
Optional("java")
["elastic", "index", "python"]
true
2.4集合エルゴードvar words: Set = ["index", "elastic", "java", "python"]
for word in words{
print("\(word)")
}
標準出力:java
index
python
elastic
2.5並べ替えvar words: Set = ["index", "elastic", "java", "python"]
for word in words.sorted(){
print("\(word)")
}
標準出力:elastic
index
java
python
2.6集合演算var oddDigits: Set = [1, 3, 5, 7, 9]
var evenDigits: Set = [0, 2, 4, 6, 8]
var primeNumbers = [2, 3, 5, 7]
print(oddDigits.union(evenDigits).sorted())
print(oddDigits.intersection(evenDigits).sorted())
print(oddDigits.subtracting(primeNumbers).sorted())
print(oddDigits.symmetricDifference(primeNumbers).sorted())
標準出力:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[]
[1, 9]
[1, 2, 9]
2.7集合間の関係var oddDigits: Set = [1, 3, 5, 7, 9]
var evenDigits: Set = [0, 2, 4, 6, 8]
var primeNumbers: Set = [3, 5, 7]
print(primeNumbers.isSubset(of: oddDigits))
print(oddDigits.isSuperset(of: primeNumbers))
print(oddDigits.isDisjoint(with: evenDigits))
標準出力:true
true
true
3.Dictionary3.1辞書と割賦を作成する
var nameOfIntegers = [Int: String]()
print(nameOfIntegers)
nameOfIntegers[2] = "two"
nameOfIntegers[3] = "three"
print(nameOfIntegers)
nameOfIntegers = [:]
print(nameOfIntegers)
var nameOfIntegers2 = [1:"one", 2:"two"]
print(nameOfIntegers2)
標準出力:[:]
[2: "two", 3: "three"]
[:]
[2: "two", 1: "one"]
3.2常用関数var nameOfIntegers = [1:"one", 2:"two"]
print(nameOfIntegers)
print(nameOfIntegers.count)
print(nameOfIntegers.isEmpty)
if let oldvalue = nameOfIntegers.updateValue("new one", forKey: 1){
print("The old value for 1 was \(oldvalue)")
}
標準出力:[1: "one", 2: "two"]
2
false
The old value for 1 was one
var nameOfIntegers = [1:"one", 2:"two"]
print(nameOfIntegers)
if let three = nameOfIntegers[3]{
print("has 3")
}
else{
print("no 3")
}
標準出力:[1: "one", 2: "two"]
no 3
var nameOfIntegers = [1:"one", 2:"two"]
print(nameOfIntegers)
nameOfIntegers[1] = nil
print(nameOfIntegers)
標準出力:[2: "two", 1: "one"]
[2: "two"]
name OfIntegers.removeValue(forKey:1)も使用できます.3.3遍歴
var nameOfIntegers = [1:"one", 2:"two"]
print(nameOfIntegers)
for (key, value) in nameOfIntegers{
print("\(key): \(value)")
}
for key in nameOfIntegers.keys{
print(key)
}
for value in nameOfIntegers.values{
print(value)
}
標準出力:[1: "one", 2: "two"]
1: one
2: two
1
2
one
two
辞書には前の配列とセットの並べ替え方法がありません.順序を変えるには、keysを並べ替えることができます.