Swift reduce元组数组自定义数据模型
我试图减少这个CustomDataModel数组中每个相似的“x”值的“y”值分量,并返回一个CustomDataModel数组(或者简单地返回一个元组数组[(Double,Double)] 我对Swift的了解充其量只是初步的,尝试在整个数组中使用如下链接函数会减少,而不是每个“x”值。我不确定如何将reduce函数限制为仅相同的值Swift reduce元组数组自定义数据模型,swift,dictionary,filter,tuples,reduce,Swift,Dictionary,Filter,Tuples,Reduce,我试图减少这个CustomDataModel数组中每个相似的“x”值的“y”值分量,并返回一个CustomDataModel数组(或者简单地返回一个元组数组[(Double,Double)] 我对Swift的了解充其量只是初步的,尝试在整个数组中使用如下链接函数会减少,而不是每个“x”值。我不确定如何将reduce函数限制为仅相同的值 let reducedArray = yValues.filter( {$0.x == $0.x}).map({$0.y}).reduce(0, +) 上述函
let reducedArray = yValues.filter( {$0.x == $0.x}).map({$0.y}).reduce(0, +)
上述函数会减少所有y值,而不是每x一次。
以下是模型和一些虚拟数据的示例:
struct CustomDataModel {
var x : Double
var y : Double
}
let yValues: [CustomDataModel] = [
CustomDataModel(x: 0.0, y: 10.0),
CustomDataModel(x: 1.0, y: 5.0),
CustomDataModel(x: 1.0, y: 12.5),
CustomDataModel(x: 1.0, y: 14.5),
CustomDataModel(x: 1.0, y: 18.45),
CustomDataModel(x: 5.0, y: 11.4),
CustomDataModel(x: 5.0, y: 9.4),
CustomDataModel(x: 5.0, y: 18.4),
CustomDataModel(x: 5.0, y: 5.0),
CustomDataModel(x: 9.0, y: 7.6),
CustomDataModel(x: 9.0, y: 13.5),
CustomDataModel(x: 9.0, y: 18.5),
CustomDataModel(x: 9.0, y: 17.6),
CustomDataModel(x: 9.0, y: 14.3),
CustomDataModel(x: 14.0, y: 19.6),
CustomDataModel(x: 14.0, y: 17.8),
CustomDataModel(x: 14.0, y: 20.1),
CustomDataModel(x: 14.0, y: 21.5),
CustomDataModel(x: 14.0, y: 23.4),
]
理想情况下,我的输出如下所示:
print(reducedArray)
//[(0.0, 10.0), (1.0, 50.45), (5.0, 44.2), (9.0, 71.5), (14.0, 102.4)]
您需要按
x
将y值
数组分组到字典中
。然后将值映射到y
,然后执行reduce
。方法如下:
let reducedArray = Dictionary(grouping: yValues, by: \.x).mapValues({ $0.map(\.y).reduce(0, +) })
print(reducedArray)
更新:如果您要求结果采用
[(Double,Double)]
格式,您可以将上述结果映射到元组。感谢弗兰肯斯坦的快速回答。生成字典可以工作,因为我可以对其进行排序,但是否仍然可以维护元组结构[(Double,Double)]根据应用程序的要求,我可以迭代索引。我想我是通过以下操作找到的:let mapped=reducedArray.map{$0}.sorted(按: