Swift数组结构

时间:2016-06-21 11:48:38

标签: arrays swift struct

考虑:

&gt

我想使用ch := make(chan int, n)的{​​{1}}值struct abc { let def: Double } func xyz(data : [Double]) { ... } var x: [abc] 来调用func xyz

我试过了:

def

我该怎么做?

4 个答案:

答案 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]