考虑:
>
我想使用ch := make(chan int, n)
的{{1}}值struct abc {
let def: Double
}
func xyz(data : [Double]) {
...
}
var x: [abc]
来调用func xyz
。
我试过了:
def
我该怎么做?
答案 0 :(得分:1)
首先让我们使用更清晰的名字
struct Numbers {
var values: [Double]
}
现在我们可以添加一个计算属性来返回前6个值
struct Numbers {
var values: [Double]
var first6Numbers: [Double] {
let numElms = min(values.count, 6)
return Array(values[0..<numElms])
}
}
正如您所看到的,计算属性中的代码确实检查了值中是否至少有6个元素。如果是这样,那么它返回前6个,否则它会返回尽可能多的元素。
<强>实施例强>
let fewNumbers = Numbers(values: [1,2,3])
fewNumbers.first6Numbers // [1,2,3]
let manyNumbers = Numbers(values: [1,2,3,4,5,6,7,8,9])
manyNumbers.first6Numbers // [1,2,3,4,5,6]
我们可以使用一个函数指定(通过参数)我们想要的结果数量
,而不是总是返回前6个值。struct Numbers {
var values: [Double]
func firstNumbers(numElms: Int) -> [Double] {
let numElms = min(values.count, numElms)
return Array(values[0..<numElms])
}
}
我们还可以返回一个6 Double的可选元组。
在这种情况下,如果值中至少有6个值,则返回双倍的6 Double。否则返回一个nil值。
struct Numbers {
var values: [Double]
var first6Values: (Double, Double, Double, Double, Double, Double)? {
guard values.count >= 6 else { return nil }
return (values[0], values[1], values[2], values[3], values[4], values[5])
}
}
示例强>
let numbers = Numbers(values: [1,2,3,4,5,6,7,8])
if let first6 = numbers.first6Values {
print(first6.0)
print(first6.1)
print(first6.2)
print(first6.3)
print(first6.4)
print(first6.5)
} else {
print("Could not find at least 6 Doubles")
}
答案 1 :(得分:0)
只需迭代序列:
x[0...5].forEach { abc in
xyz(abc.def)
}
或
for abc in x[0...5] {
xyz(abc.def)
}
答案 2 :(得分:0)
如果您要为前六个def
项构建x
属性数组,可以使用map
:
let y = x[0...5].map { (object: abc) -> (Double) in
return object.def
}
xyz(y)
或者您可以将其浓缩为:
xyz(x[0...5].map { $0.def })
答案 3 :(得分:0)
您可以使用相同的重复值初始化数组,如下所示:
var threeDoubles = [Double](count: 3, repeatedValue: 0.0)
会给出:
[0.0, 0.0, 0.0]