2014-10-03 79 views
1
let dicForSections = ["Home":["Rooms","Stuff"],"My Profile": ["Property", "Agent", "Policy", "Claims"], "Help":["Recovery","ok"]] 

我在斯威夫特語言新,我使用的UITableView具有多個部分。我有一個數組的鍵值,所以我想獲得他們的鑰匙在一個數組和他們的值在另一個數組記憶每個值是一個單獨的數組,因爲一個數組(鍵)的部分標題和其他每個部分的行。示例代碼寫在下面。如果有任何人知道任何事情親切指導me.Thanks提前獲取陣列陣列也是關鍵的價值及其在另一個數組值斯威夫特語言

+3

這是一個字典>不是嵌套數組。目前還不清楚你的要求是什麼,也沒有「示例代碼如下」 – 2014-10-03 06:58:36

+0

只想將數組中的鍵及其值存儲在另一個數組中。 – 2014-10-03 07:03:37

回答

3

下面是一個例子:

let dicForSections = ["Home":["Rooms","Stuff"],"My Profile": ["Property", "Agent", "Policy", "Claims"], "Help":["Recovery","ok"]] 

var keys = [String]() 
var values = [[String]]() 

for (key, value) in dicForSections { 
    keys.append(key) 
    values.append(value) 
} 
2

斯威夫特的Dictionary已經計算性能的返回鍵和值:

let dicForSections = ["Home":["Rooms","Stuff"],"My Profile": ["Property", "Agent", "Policy", "Claims"], "Help":["Recovery","ok"]] 

var keys = [String](dicForSections.keys) 
var values = [[String]](dicForSections.values) 

馬丁 - [R建議讓編譯器推斷該類型:

var keys = Array(dicForSections.keys) 
var values = Array(dicForSections.values) 
+0

或者'keys = Array(dicForSections.keys)'等。類型是自動推斷的。 – 2014-10-03 08:03:18

+0

@MartinR這是更清潔,我同意。謝謝! – 2014-10-03 08:04:40

+0

有關鍵/值狀態的文檔返回「所有字典的鍵/值的無序可迭代集合」。它沒有明確保證鍵和值是以相同(對應)的順序返回的(至少我找不到這樣的語句)。 – 2014-10-03 08:13:28

0

另一個p奧斯特已經從字面上回答了你的問題。鑑於您提出的使用方法以及字典是無序集合的事實,並且您通常需要更多地控制表視圖的佈局,我強烈建議您重新考慮您的數據格式。

如果您考慮表格背後的數據,它實際上是一個數組部分,每個部分都有一個標題和一些關聯的數據。

這表明我只是用元組的數組的第一次切割重組:

let sections = [("Home", ["Rooms","Stuff"]), ("My Profile", ["Property", "Agent", "Policy", "Claims"]), ("Help",["Recovery","ok"])] 

func nameForSection(section:Int) -> String { 
    return sections[section].0 
} 

func titleForIndexPath(index:NSIndexPath) -> String { 
    return sections[index.section].1[index.row] 
} 

這樣的優點,創造的數據是非常簡潔,但無論是數據創建或代碼訪問數據特別清晰。作爲一個方面說明,您的現有數據可以通過此代碼片段重新組織到這個結構中,儘管這些部分的排序將會丟失。

let sections = Array(dicForSections) 

在Objective-C,我們可能會使用詞典的數組解決這個問題,但既然你問雨燕雨燕的嵌入式結構,讓我們只使用那些,並添加一些格式,而我們在這:

struct Section { 
    let title:String 
    let rows:[String] 
} 

let sections = [ 
    Section(title:"Home", rows:["Rooms","Stuff"]), 
    Section(title:"My Profile", rows:["Property", "Agent", "Policy", "Claims"]), 
    Section(title:"Help", rows:["Recovery","ok"]) 
] 

func nameForSection(section:Int) -> String { 
    return sections[section].title 
} 

func titleForIndexPath(index:NSIndexPath) -> String { 
    return sections[index.section].rows[index.row] 
} 

現在數據的佈局和對數據的訪問都更加安全和清晰,並且我們的部分的順序保持不變,因爲我們沒有通過字典對其進行導入。