我有各种tuple
的数组。我想创建一个for
循环,添加tuple
的第二部分,如果第一部分是相同的。
例如我正在寻找结果:
(2014,11)(2015,13)
我制作的代码如下:
var tuple = (Int, Double)
var array = [tuple]
array.append((2014,3),(2014,2),(2014,6),(2015,8),(2015,5)]
var temp = 0
for i in array {
if tuple.0 = tuple.0 {
temp += temp
}
}
这不像我期望的那样按年份分组。任何想法将不胜感激:))
由于
答案 0 :(得分:1)
此代码可以满足您的需求(在Swift 2中):
var dict: Dictionary<Int, Int> = [:]
for t in array {
dict[t.0] = (dict[t.0] ?? 0) + t.1
}
嗯,有点......结果将是[2014 : 11, 2015 : 13]
答案 1 :(得分:0)
作为Marco我说词典可能是更好的数据结构,但如果你坚持保存在元组数组中,你可以使用一些更高阶函数的疯狂,Swift 2(你为什么要用1.2?):
let array = [(2014,3),(2014,2),(2014,6),(2015,8),(2015,5)]
let keys = Set(array.map{return $0.0})
let result = keys.map{(k:Int) -> (Int,Int) in (k, array.filter{ $0.0 == k }.map{ $0.1 }.reduce(0, combine:+))}
print(result)
结果
[(2014, 11), (2015, 13)]
请注意,Set不保证其元素的顺序。实际上它没有订单。
要确保订单,您可以使用sort{$0.0 < $1.0}
let result = keys.map{(k:Int) -> (Int,Int) in (k, array.filter{ $0.0 == k }.map{ $0.1 }.reduce(0, combine:+))}.sort{$0.0 < $1.0}
字典解决方案的一个优点是能够排序。
let result = ....sort{$0.0 < $1.0}
- &GT; [(2014, 11), (2015, 13)]
let result = ....sort{$0.0 > $1.0}
- &GT; [(2015, 13), (2014, 11)]
let result = ....sort{$0.1 > $1.1}
- &GT; [(2015, 13), (2014, 11)]
let result = ....sort{$0.1 < $1.1}
- &GT; [(2014, 11), (2015, 13)]