我需要填充一个描述Matrix [[Double]]的数组。矩阵的每个元素都具有以下形式:
a(i,j) = exp(a*(i+j) + b*min(i,j))
有没有一种优雅的方式,而不是使用2个嵌入式循环?
答案 0 :(得分:2)
您可以使用map
两次来创建matrix
。这是一种功能性方法,实际上只是两个循环:
let maxi = 5 // largest acceptable index
let maxj = 3 // largest acceptable index
let a = 2.3
let b = 3.4
let matrix = (0...maxi).map { i in (0...maxj).map { j in exp(a * Double(i + j) + b * Double(min(i, j))) } }
如果我们按照这样格式化它可能会更容易阅读:
let matrix = (0...maxi).map { i in
(0...maxj).map { j in
exp(a * Double(i + j) + b * Double(min(i, j)))
}
}
这比使用循环的一个优点是您可以创建只读(let
)的矩阵。当然,如果你想要它是可变的,你总是可以使它var
。