2015-08-24 34 views
1

我有兩個陣列:根據條件將數組合併到字典中?

First array = ["lines","lines","lines","lines"] 
Second array = ["one","two","","three","four","","five","six","","seven","eight"] 

我想將它們合併到具有嵌套陣列的字典:

Dict = ["lines":["one","two"],"lines":["three","four"],"lines":["five","six"],"lines":["seven","eight"]] 

基本上值從所述第二陣列應拆分由於空白空間標準(」 「)並在字典中分配爲獨立的數組對象。

+2

你不能有一個重複鍵字典。兩個級別的陣列是否足夠? '[[「one」,「two」],[「three」,「four」],[「five」,「six」],[「seven」,「eight」]] – NRitH

+0

謝謝澄清。是的,我相信會的。 –

+0

只是通過第一個數組循環使用for循環,然後爲第二組值設置一個while循環,通過第二個數組的正向計數器「while array2 [counter]!=」「」do blah blah這是僞代碼,但你的想法 – Loxx

回答

1

嘗試這種解決方案:

let array2 = ["one","two","","three","four","","five","six","","seven","eight"] 
var splittedArray = array2.split { $0 == "" } 

結果從遊樂場: enter image description here

重要提示:我使用Xcode中的iOS 7 9

+1

只有Swift 2,但好抓! – Moritz

+0

@EricD。謝謝,補充說明:) –

-1

這會做到這一點:

for value in firstArray { 
    if value == "" { 
     // Add a blank subarray whenever we find an empty string. 
     combinedArray.append([String]()) 
    } else if combinedArray.count == 0 { 
     combinedArray.append([value]) 
    } else { 
     // Append the value to the last subarray. 
     combinedArray[combinedArray.count - 1].append(value) 
    } 
} 
+0

問題是您的示例跳過第一項。結果:'[[two],[three,four],[5,6],[seven,8]]''。 – Moritz

+0

我也嘗試過'filter()'和'reduce()',但是代碼太難看了。 – NRitH

+0

編輯與第一個元素一起使用。 – NRitH

0

這麼多高雅,但這個工作就像你想要的:

var First = ["lines","lines","lines","lines"] 
var Second = ["one","two","","three","four","","five","six","","seven","eight"] 

var counter = 0 
var counters = 0 
var counterss = 0 
var response = NSMutableArray(capacity: First.count) 

for obj in First { 
    var re = NSMutableArray() 
    while counterss != Second.count-1 && Second[counterss] != "" { 
     if (counterss < (Second.count)) { 
      re[counters] = Second[counterss] 
      counterss = counterss + 1 
      counters = counters + 1 
     } 
    } 
    if Second[counterss] == "" { 
     counterss = counterss + 1 
    } 
    if counterss == (Second.count-1) { 
     re[counters] = Second.last! 
    } 
    counters = 0 
    response[counter] = [First[counter],re] 
    counter = counter + 1 
} 
println("heres the final array \(response)") 

截圖:

enter image description here

他水庫是與作爲主陣列內所需的字典對象的解決方案:

var First = ["lines","lines","lines","lines"] 
var Second = ["one","two","","three","four","","five","six","","seven","eight"] 

var counter = 0 
var counters = 0 
var counterss = 0 
var response = NSMutableArray(capacity: First.count) 

for obj in First { 
    var re = NSMutableArray() 
    while counterss != Second.count-1 && Second[counterss] != "" { 
     if (counterss < (Second.count)) { 
      re[counters] = Second[counterss] 
      counterss = counterss + 1 
      counters = counters + 1 
     } 
    } 
    if Second[counterss] == "" { 
     counterss = counterss + 1 
    } 
    if counterss == (Second.count-1) { 
     re[counters] = Second.last! 
    } 
    counters = 0 
    var ss = [First[counter] : re] as Dictionary 
    response[counter] = ss 
    counter = counter + 1 
} 
println("heres the final array \(response)") 

和這裏的決賽中,詞典的詞典:

var First = ["lines","lines","lines","lines"] 
var Second = ["one","two","","three","four","","five","six","","seven","eight"] 

var counter = 0 
var counters = 0 
var counterss = 0 
var response = NSMutableDictionary(capacity: First.count) 

for obj in First { 
    var re = NSMutableArray() 
    while counterss != Second.count-1 && Second[counterss] != "" { 
     if (counterss < (Second.count)) { 
      re[counters] = Second[counterss] 
      counterss = counterss + 1 
      counters = counters + 1 
     } 
    } 
    if Second[counterss] == "" { 
     counterss = counterss + 1 
    } 
    if counterss == (Second.count-1) { 
     re[counters] = Second.last! 
    } 
    counters = 0 
    var ss = [First[counter] : re] as Dictionary 
    response[counter] = ss 
    counter = counter + 1 
} 
println("heres the final array \(response)") 

這不是一個有序字典的字典索引,但是這些指標與您想要的信息相匹配:

enter image description here

是的,這是一本字典詞典,它包含每本詞典中的「名稱」和「數組」,就像要求的那樣。

+0

對不起,不得不再次更新,現在它可以工作,因爲它應該是 – Loxx

+0

,並且這包括來自第一個數組 – Loxx

+0

的「行」值,它適用於任何大小的數組,因此如果您使用中斷更改數組,然後更改「線」數量依然有效 – Loxx