我有一系列水果,如下面的代码所示。然后我有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
答案 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)")
}