Apple本次發表會發佈了新的語言來取代之前的!
對岸都已經很熱烈的討論,不過看台灣的論壇好像沒多少文章
相較之下真的很少,希望這個主題可以大家一起來交流,不然每次要看簡體中文也挺累的!
最近開始看Apple的文件,寫到目前為止有個問題一直讓我覺得怪怪的!
程式碼如下
import Foundation
let shoppinglist = [
"book" : [1,2,3,4,5],
"Game":[10,20,30,40,50],
"iPhone":[100,200,300,400,500]
]
var lagter = 0
for(kind,numbers) in shoppinglist {
for number in numbers{
println(kind , number)
if number > lagter{
lagter = number
}
println(lagter)
}
}
----------------------------------------------------
這個是原廠提供的PDF上面的範例,當然名稱有自己改變,然後習慣了解所有程式碼的數據變化
所以都會一行一行印出來!!
不過印出的結果反而是
(book, 1)
1
(book, 2)
2
(book, 3)
3
(book, 4)
4
(book, 5)
5
(iPhone, 100)
100
(iPhone, 200)
200
(iPhone, 300)
300
(iPhone, 400)
400
(iPhone, 500)
500
(Game, 10)
500
(Game, 20)
500
(Game, 30)
500
(Game, 40)
500
(Game, 50)
500
---------
目前讓我不解的是 按照程式流程 我的陣列是先Book 然後應該是會是Game但是反而變成是iPhone
的陣列先載入,不知道哪邊寫錯會是出錯!!
如果按照我的思維 我目前的程式碼執行結果應該是
(book, 1)
1
(book, 2)
2
(book, 3)
3
(book, 4)
4
(book, 5)
5
(Game, 10)
10
(Game, 20)
20
(Game, 30)
30
(Game, 40)
40
(Game, 50)
50
(iPhone, 100)
100
(iPhone, 200)
200
(iPhone, 300)
300
(iPhone, 400)
400
(iPhone, 500)
500
ilbed wrote:
Apple本次發表會...(恕刪)
剛剛去查了一下 我覺得你是對的
這是書上的例子
let numberOfLegs = ["spider": 8, "ant": 6, "cat": 4]
for (animalName, legCount) in numberOfLegs {
println("\(animalName)s have \(legCount) legs")
}
// spiders have 8 legs
// ants have 6 legs
// cats have 4 legs”
Excerpt From: Apple Inc. “The Swift Programming Language.” iBooks. https://itun.es/us/jEUH0.l
當你在iterate the dictionary 的時候應該會按照順序的, 我也不是很確定 lol
##############
import Foundation
01. let shoppinglist = [
02. "book" : [1,2,3,4,5],
03. "Game":[10,20,30,40,50],
04. "iPhone":[100,200,300,400,500]
05. ]
06.
07. var lagter = 0
08. for(kind,numbers) in shoppinglist {
09. for number in numbers{
10. println(kind , number)
11. if number > lagter{
12. lagter = number
13. }
14. println(lagter)
15. }
16. }
會自動把陣列中的排序按照英文字母排序然後載入
那如果我不想按照字母排序 想要用陣列的宣告順序載入要怎麼用呢?
不過我按照我程式碼的話應該也會先載入Book的陣列然後是Game最後才是iPhone
(1) "Dictionary stores an unordered collection of item of the same type with a key."
(2) "Swift’s Dictionary type is an unordered collection. The order in which keys, values, and key-value pairs are retrieved when iterating over a dictionary is not specified."
(3) "The only restriction(of the Dictionary) is that KeyType must be hashable"
因此, 我認為swift的Dictionary應該跟Perl的hash一樣, 存在其中的資料不是按照順序的, 因為 key在儲存的時候會被hash過. 所以如果你要print出你想要的結果, 你可能要寫像這樣
for(kind,numbers) in sort(shoppinglist.keys,
{ (s1: String, s2: String) -> Bool in
return s1 < s2
}) {}
OR
for(kind,numbers) in sort(shoppinglist.keys, {$0 < $1}) {}
#不確定能不能跑 我完全是用Perl hash的方法去猜的
PS。在 swift 裡有提供 sort(), definition : Swift’s standard library provides a function called sort, which sorts an array of values of a known type, based on the output of a sorting closure that you provide.
要如何Key值呢? 因為沒接觸過Swift所以對這個還不熟
程式碼要如何修改!
或是有沒有swift的函示庫可以參考,因為我Google都找不到!?
另外我利用二樓的code來改寫
1. let numberOfLegs = ["spider": [1,2,3],
2. "ant": [10,20,30],
3. "cat": [100,200,300]
4. ]
5.
6. var lagter = 0
7.
8. for (kind, legCount) in numberOfLegs {
9. println(kind)
10. for number in legCount{
11. if number > lagter{
12. lagter = number
13. }
14. println(lagter)
15. }
16. }
印出來是可以按照順序的
但是程式碼一樣只剩下名稱不一樣@@?
blue65 wrote:
Unlike ite...(恕刪)
ilbed wrote:
所以每次在練習寫程式...(恕刪)
可以試試看這個嗎
// descendant
import Foundation
let shoppinglist = [
"book" : [1,2,3,4,5],
"Game":[10,20,30,40,50],
"iPhone":[100,200,300,400,500]
]
var lagter = 0
// $0<$1 // ascendant
for(kind,numbers) in sort(shoppinglist,{$0>$1}) {
for number in numbers{
println(kind , number)
if number > lagter{
lagter = number
}
println(lagter)
}
}
請告知能不能跑 lol 我沒裝IDE
thx
內文搜尋

X