2016-06-11 54 views
0

這裏有一個簡單的代碼:結構參數 - 陣列

struct Car { 
    var model: String 
    var producer: String 
    var year: Int 
} 

func AverageYear(years : [Int]) -> Int { 
    var x : Int = 0 
    for i in 0..<years.count { 
     x += years[i] 
    } 
    return x/years.count 
} 

var list = [Car(model: "C400", producer: "Mercedes-benz", year: 2014), 
      Car(model: "GLE450", producer: "Mercedes-benz", year: 2016)] 

print(AverageYear([list[0].year, list[1].year])) 

我怎麼能代替AverageYear([list[0].year, list[1].year]) - 無需枚舉所有的元素?喜歡的東西AverageYear([list.year])

+0

你是什麼意思的「沒有枚舉」?你將不得不枚舉整個數組來獲得一個數組,這是一個'for'循環還是一個'map'。 – Hamish

回答

0

您可以使用地圖從汽車的給定的數組一樣,建設年數組:

var list = [Car(model: "C400", producer: "Mercedes-benz", year: 2014), 
      Car(model: "GLE450", producer: "Mercedes-benz", year: 2016)] 

let years = list.map { $0.year } 
print(AverageYear(years)) 
-1

減少使得它在一個單一的線上工作:

struct Car { 
    var model: String 
    var producer: String 
    var year: Int 
} 

var list = [Car(model: "C400", producer: "Mercedes-benz", year: 2014), 
      Car(model: "GLE450", producer: "Mercedes-benz", year: 2016)] 

// slice the array to get the elements you want 
let slice = list[0...1] 

// sum every car.year in the slice and divide by the count 
let averageYear: Int = slice.reduce(0){ $0 + $1.year }/slice.count 

print(averageYear) // -> 2015 

公告我使用list[0...1],這意味着「元素0到1,包括」。它返回原始數組的一部分。如果我有10個元素,我可以做list[5...8],它會給我一個元素分片5,6,7,8。