From 562551d69644382d74fe8d9d99ae6f616080c195 Mon Sep 17 00:00:00 2001 From: AceVest Date: Sat, 4 Mar 2017 12:29:41 +0800 Subject: [PATCH] ... --- .../Basics.xcplaygroundpage/Contents.swift | 88 ----------- .../Contents.swift | 147 ++++++++++++++++++ .../AcePlay.playground/contents.xcplayground | 1 + .../UserInterfaceState.xcuserstate | Bin 18964 -> 20006 bytes 4 files changed, 148 insertions(+), 88 deletions(-) create mode 100644 learn/AcePlay/AcePlay.playground/Pages/CollectionTypes.xcplaygroundpage/Contents.swift diff --git a/learn/AcePlay/AcePlay.playground/Pages/Basics.xcplaygroundpage/Contents.swift b/learn/AcePlay/AcePlay.playground/Pages/Basics.xcplaygroundpage/Contents.swift index 4890fa0..0c860f6 100644 --- a/learn/AcePlay/AcePlay.playground/Pages/Basics.xcplaygroundpage/Contents.swift +++ b/learn/AcePlay/AcePlay.playground/Pages/Basics.xcplaygroundpage/Contents.swift @@ -130,91 +130,3 @@ print() print("The String is: \(str)") -// Print separator & terminator -var company:Array = [ "Apple", "Google", "Facebook", "Tencent" ] -print(company[0], company[1], company[2], company[3], separator: "#", terminator: " $$$$$\n") - -printLine("Count company Array 1") -for (i,v) in company.enumerated() { // enumerate 返回的是 index value 组成的元组 - print(i, v, separator: " - ", terminator: "\n") -} - -printLine("Count company Array 2") -company.insert("Alibaba", at: company.count) -for i in 0..(0.. = [] -var SetB = Set() -var SetC: Set = ["ASM", "C", "C++", "go", "Swift"] -//var SetD: Set = ["mov", "pop", "push", "xchg"] // 可以通过数组类型推断出Set的类型 -SetB.insert("A") -SetB.insert("c") -SetB.insert("c") -SetB.count -//SetC.removeFirst() -SetC.remove("ASM") - -if let removedVal = SetC.remove("ASM") { - print("\(removedVal) I'm over it.") -} else { - print("I never much cared for that.") - SetC.insert("ASM") -} - -if SetC.contains("Swift") { - print("SetC Contains Swift") -} - -for v in SetC.sorted() { - print(v) -} - -printLine("Dictionary") -//var DictA = Dictionary() -//var DictB = ["KA":"VA", "KB":"VB", "KC":"VC"] -//var DictC: [String:String] = [:] -var DictD = [Int:String]() - -DictD[1] = "V1" -DictD[4] = "V2" -DictD[99] = "V3" -DictD[36] = "F4" -if let oldValue = DictD.updateValue("V4", forKey: 36) { // means: if let oldValue = DictD[36] - print("The old value for Key:36 was \(oldValue)") -} - -print("DictD Item Count: ", DictD.count) - -for (k, v) in DictD { - print("Key:", k, " Value: ", v) -} - -for key in DictD.keys.sorted() { - print(key) -} - -for value in DictD.values.sorted() { - print(value) -} - -let keys = [Int](DictD.keys) -print(keys) \ No newline at end of file diff --git a/learn/AcePlay/AcePlay.playground/Pages/CollectionTypes.xcplaygroundpage/Contents.swift b/learn/AcePlay/AcePlay.playground/Pages/CollectionTypes.xcplaygroundpage/Contents.swift new file mode 100644 index 0000000..993fb4c --- /dev/null +++ b/learn/AcePlay/AcePlay.playground/Pages/CollectionTypes.xcplaygroundpage/Contents.swift @@ -0,0 +1,147 @@ +//: [Previous](@previous) + +import Foundation + +var str = "Hello, playground" + +//: [Next](@next) + +var company:Array = [ "Apple", "Google", "Facebook", "Tencent" ] + +// Print separator & terminator +print(company[0], company[1], company[2], company[3], separator: "#", terminator: " $$$$$\n") + +// 遍历数组 +for v in company { + print("Company: \(v)") +} + +printLine("Count company Array 1") +for (i,v) in company.enumerated() { // enumerate 返回的是 index value 组成的元组 + print(i, v, separator: " - ", terminator: "\n") +} + +printLine("Count company Array 2") +company.insert("Alibaba", at: company.count) +for i in 0.. = [1, 2] +var someIntsE: [Int] = [1, 2] +var someIntsF = [1, 2] + + +someIntsA.append(1) +someIntsB.replaceSubrange(CountableRange(0.. = [] +var SetB = Set() +var SetC: Set = ["ASM", "C", "C++", "go", "Swift"] +var SetD: Set = ["mov", "pop", "push", "xchg"] // 可以通过数组类型推断出Set的类型 +SetB.insert("A") +SetB.insert("c") +SetB.insert("c") +SetB.count +//SetC.removeFirst() +SetC.remove("ASM") + +if let removedVal = SetC.remove("ASM") { + print("\(removedVal) I'm over it.") +} else { + print("I never much cared for that.") + SetC.insert("ASM") +} + +if SetC.contains("Swift") { + print("SetC Contains Swift") +} + +for v in SetC { + print(v) +} + +for (i, v) in SetD.enumerated() { + print("Iterating Over a Set \(i)\t\(v)") +} + +for (i, v) in SetD.sorted().enumerated() { + print("Iterating Over a Set in Order \(i)\t\(v)") +} + +let oddDigits: Set = [1, 3, 5, 7, 9] +let evenDigits: Set = [0, 2, 4, 6, 8] +let singlePrimeDigits: Set = [2, 3, 5, 7] + +// 并 +print("Set Union: ", oddDigits.union(evenDigits).sorted()) + +// 差 +print("Set Subtracting: ", oddDigits.subtracting(singlePrimeDigits).sorted()) + +// 交 +print("Set Intersection: ", oddDigits.intersection(singlePrimeDigits).sorted()) + +// 补 +print("Set SymmetricDifference: ", oddDigits.symmetricDifference(singlePrimeDigits).sorted()) + + +let houseAnimals: Set = ["🐶", "🐱"] +let farmAnimals: Set = ["🐮", "🐑", "🐶", "🐔", "🐱"] +let cityAnimals: Set = ["🐦", "🐭"] + +print(houseAnimals.isSubset(of: farmAnimals)) // 是否是子集 +print(houseAnimals.isStrictSubset(of: farmAnimals)) // 是否是真子集 +print(farmAnimals.isSuperset(of: houseAnimals)) +print(farmAnimals.isDisjoint(with: cityAnimals)) // 是否无交集 + +printLine("Dictionary") +//var DictA = Dictionary() +//var DictB = ["KA":"VA", "KB":"VB", "KC":"VC"] +//var DictC: [String:String] = [:] +var DictD = [Int:String]() + +DictD[1] = "V1" +DictD[4] = "V2" +DictD[99] = "V3" +DictD[36] = "F4" +if let oldValue = DictD.updateValue("V4", forKey: 36) { // means: if let oldValue = DictD[36] + print("The old value for Key:36 was \(oldValue)") +} + +print("DictD Item Count: ", DictD.count) + +for (k, v) in DictD { + print("Key:", k, " Value: ", v) +} + +for key in DictD.keys.sorted() { + print(key) +} + +for value in DictD.values.sorted() { + print(value) +} + +let keys = [Int](DictD.keys) +print(keys) \ No newline at end of file diff --git a/learn/AcePlay/AcePlay.playground/contents.xcplayground b/learn/AcePlay/AcePlay.playground/contents.xcplayground index 9140691..9baedd5 100644 --- a/learn/AcePlay/AcePlay.playground/contents.xcplayground +++ b/learn/AcePlay/AcePlay.playground/contents.xcplayground @@ -7,5 +7,6 @@ + \ No newline at end of file diff --git a/learn/AcePlay/AcePlay.playground/playground.xcworkspace/xcuserdata/Ace.xcuserdatad/UserInterfaceState.xcuserstate b/learn/AcePlay/AcePlay.playground/playground.xcworkspace/xcuserdata/Ace.xcuserdatad/UserInterfaceState.xcuserstate index a208718ee0cd558cb5f6d0c14f210a5583fb4d80..423c7fc3ef157c481ed35cc158f319e155aab355 100644 GIT binary patch delta 10188 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 -- 2.47.0