2015-01-21 64 views
-3

我不是很專業的Swift。創建數組swift

我已經創建了需要這樣的數據的自定義視圖:

var myData = [ 
    ["label" : "2000", "value" : NSNumber(int:15)], 
    ["label" : "2001", "value" : NSNumber(int:7)], 
    ["label" : "2002", "value" : NSNumber(int:60)], 
    ["label" : "2003", "value" : NSNumber(int:30)], 
    ["label" : "2004", "value" : NSNumber(int:15)], 
    ["label" : "2005", "value" : NSNumber(int:45)], 
    ["label" : "2006", "value" : NSNumber(int:45)], 
    ["label" : "2007", "value" : NSNumber(int:50)], 
    ["label" : "2008", "value" : NSNumber(int:60)], 
    ["label" : "2009", "value" : NSNumber(int:70)], 
    ["label" : "2010", "value" : NSNumber(int:80)], 
    ] as NSArray 

怎樣才能以編程方式?

讓我解釋一下:

我有一個包含一年兩名列表和其他包含的值:

var listYear = [] 

var listValue = [] 

如何可以在這兩個列表,產生陣列myData的?

+0

您到目前爲止嘗試過的任何東西?可能有複雜的方法來做到這一點,使用Zip2和map()等等。但是,如果你不能寫一個簡單的for循環,那麼這對你並不會有幫助。 – 2015-01-21 09:07:12

回答

1

做到這一點,最簡單的方法是

let listYear = ["2000","2001","2002"] 
let listValue = [1,2,3] 
var combined : [[String:AnyObject]] = [] 

for i in 0..<listYear.count 
{ 
    combined.append(["label" : listYear[i], "value" : NSNumber(integer:listValue[i])]) 
} 

println(combined) 

一個更復雜的方式

let listYear = ["2000","2001","2002"] 
var listValue = [1,2,3] 

let combined = map(Zip2(listYear, listValue)) { 
    ["label" : $0, "value" : NSNumber(integer:$1)] 
} 
+1

第二種選擇對我來說,謝謝:) – Paul 2015-01-21 10:33:25

0

您可以enumerate結合map打造字典這樣的數組:

let listYear = [2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010] 
let listValue = [15, 7, 60, 30, 15, 45, 45, 50, 60, 70, 80] 

let list: [[String : Int]] = map(enumerate(listYear)) { (index, year) in 
    return [ "label": year, "value": listValue[index]] 
} 

當然對於這個工作listYearlistValue必須具有相同數量的元素,並且元素之間的關聯由索引完成。