gpt4 book ai didi

arrays - 从数组索引列表创建子数组

转载 作者:可可西里 更新时间:2023-11-01 00:56:08 26 4
gpt4 key购买 nike

我有一个带有计算属性的枚举,它返回一个索引数组:

enum ScaleDegree {
case tonic
case supertonic
case mediant
case subdominant
case dominant
case submedian
case leading

var indexes: [Int] {
switch self {
case .tonic: return [0,2,4]
case .supertonic: return [1,3,5]
case .mediant: return [2,4,6]
case .subdominant: return [3,5,0]
case .dominant: return [4,6,1]
case .submedian: return [5,0,2]
case .leading: return [6,1,3]
}
}
}

我用它从一个更大的数组中提取一个子数组:

let cMajor = ["C", "D", "E", "F", "G", "A", "B"]

let cMajorTonic = [cMajor[ScaleDegree.tonic.indexes[0]], cMajor[ScaleDegree.tonic.indexes[1]], cMajor[ScaleDegree.tonic.indexes[2]]]

cMajorTonic 语法看起来很麻烦,我希望 Swift 4 能给我一个更简单的方法来将单个元素提取到一个新数组中,但我的搜索没有找到一个聪明的方法来做到这一点。

有没有更好的写法建议?

最佳答案

这是使用 map 的好地方:

let cMajor = ["C", "D", "E", "F", "G", "A", "B"]
let cMajorTonic = ScaleDegree.tonic.indexes.map { cMajor[$0] }
print(cMajorTonic)
["C", "E", "G"]

您可以将此函数添加到您的枚举中:

func appliedTo(scale: [String]) -> [String] {
return self.indexes.map { scale[$0] }
}

然后它会变成:

let cMajorTonic = ScaleDegree.tonic.appliedTo(scale: cMajor)

关于arrays - 从数组索引列表创建子数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47956735/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com