计算3个数组中键的总值

时间:2016-09-18 12:45:41

标签: arrays swift dictionary

我有一系列水果,如下面的代码所示。然后我有3个数组,里面有一个字典,根据水果在数组中定位的位置给出一个值。我计划在TableView中执行此操作。例如,

中的水果

[0]元素的值为4(fruitName.count)

[1]元素的值为3(fruitName.count - 1)等...

我的问题是我需要计算特定水果的所有阵列的水果总量。

    var fruitName = ["Apple", "Pear", "Banana", "Orange"]
var Group1 = ["Apple": (fruitName.count), "Pear": (fruitName.count-1),"Banana": (fruitName.count - 2), "Orange": (fruitName.count - 3)]
var Group2 = ["Apple": (fruitName.count), "Orange": (fruitName.count - 1), "Pear": (fruitName.count - 2), "Bananna": (fruitName.count - 3)]
var Group3 = ["Pear": (fruitName.count), "Apple": (fruitName.count - 1), "Orange": (fruitName.count - 2), "Bananna": (fruitName.count - 3)]

所以结果应该提供以下答案。我该如何解决这个问题?我很欣赏代码写得不完美。我希望我已经解释好了......谢谢

Apple - 4(Group1)+4(Group2)+3(Group3)= 11

梨-3(组1)+ 2(组2)+ 4(组3)= 9

Banana - 2(Group1)+ 1(Group2)+ 1(Group3)= 4

橙 - 1(组1)+ 3(组2)+ 2(组3)= 6

3 个答案:

答案 0 :(得分:2)

首先,你在阵列中有几个 Banan n a ... 其次,所有变量都是常量(let

从组中创建一个数组

let groups = [Group1, Group2, Group3]

然后通过fruitName数组迭代,(平面)将相应的值映射到数组并添加值(reduce:combine:

for name in fruitName {
  let max = groups.flatMap({$0[name]}).reduce(0, combine: {$0 + $1})
  print(name + " = \(max)")
}

Swift 3 中,flatMap / reduce

let max = groups.flatMap({$0[name]}).reduce(0, {$0 + $1})

答案 1 :(得分:1)

字典值由其键访问,因此我们可以遍历数组中的每个水果,将其用作访问每个数组中的计数的键,然后将它们全部添加到一起。注意将数组名称更改为小写" g。"

修改 从注释中可以使用nil coalescing运算符,以防水果在数组中不均匀。然后,计数将设置为0。

for fruit in fruitName {
    let count1 = group1[fruit] ?? 0, count2 = group2[fruit] ?? 0, count3 = group3[fruit] ?? 0
    let fruitTotal = count1 + count2 + count3
    print(fruitTotal)
}

打印

  

11

     

9

     

4

     

6

答案 2 :(得分:0)

这不像我不喜欢@vadian和@Shades之前的答案,但这是另一种方式:

var x = [String:Int]()
[Group1, Group2, Group3].flatMap({$0}).forEach({ x[$0.0] = $0.1 + (x[$0.0] ?? 0) })

然后打印出来:

for (k,v) in x.enumerate() {
  print ("\(k) : \(v)")
}