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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 delta 9392 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 -- 2.55.0