编辑
我原来的答复错过了你的问题似乎点,这里是什么你想:
let minutes = posts.reduce(([String : Int]())) { accumulator, value in
var currentData = accumulator
if accumulator.keys.contains(value.uid) {
currentData[value.uid] = accumulator[value.uid]! + value.minutes
return currentData
} else {
currentData[value.uid] = value.minutes
return currentData
}
}
这是游乐场代码只有总计唯一的用户ID的分钟:
let posts = [Post(key: "key", uid: "0", minutes: 5, name: "name"), Post(key: "key", uid: "1", minutes: 5, name: "name"), Post(key: "key", uid: "1", minutes: 5, name: "name"), Post(key: "key", uid: "1", minutes: 5, name: "name"), Post(key: "key", uid: "3", minutes: 2, name: "name")]
let count = posts.reduce((0, [String]())) { accumulator, value in
if accumulator.1.contains(value.uid) {
return accumulator
} else {
return (accumulator.0 + value.minutes, accumulator.1 + [value.uid])
}
}.0
减少让你“遍历”您的帖子数组。你从0开始分钟计数,并且一个空的uid数组。如果uid在那里,那么你不会在分钟数上加上任何分钟,并且保持原样。如果没有,则添加分钟并将字符串添加到uid字符串数组。在最后你通过得到的元组的第一个元素(因此.0)
较短的版本是获得分钟数:
let count = posts.reduce((0, [String]())) {
return $0.1.contains($1.uid) ? $0 : ($0.0 + $1.minutes, $0.1 + [$1.uid])
}.0
你是什么意思'我有麻烦共计分钟基于uid'你想与具体的用户界面分钟的总和?如果是,请在您的问题中添加相关细节。 –
是的,一个数组可以具有相同的uid,我希望每个唯一uid实例的总分钟数,以便最终每个唯一uid具有总分钟数。我会更新原文。谢谢! – Anno
您尚未更新您的问题? –