【发布时间】:2019-06-15 10:56:13
【问题描述】:
我想计算胜利的次数并计算所有分数。
我愿意使用 flatmap map 和 reduce,以降低复杂性。为了安全起见,我可以通过循环获得它
问题在于,在 allMatch 中,我可以有不同的 teamID(团队可以单人或多人玩)并且顺序无关紧要(例如 teamID 1,2 等于 teamID 2,1
struct InfoMatch: Hashable {
let teamId: Set<Int>
let rank: Int
let mPoints: Int
let vPoints: Int
}
所有比赛都是数组数组,因为它返回每场比赛的每支球队的信息,在这个例子中,第一场比赛有2支球队,最后一场有3支球队
let allMatch: [[InfoMatch]] = [
[InfoMatch(teamId:[1,2],rank:1,mPoints: 200,vPoints: 0),InfoMatch(teamId:[3,4],rank:2,mPoints: 100,vPoints: 0)],
[InfoMatch(teamId:[1,2],rank:2,mPoints: 0,vPoints: 10),InfoMatch(teamId:[4,3],rank:1,mPoints: 0,vPoints: 20)],
[InfoMatch(teamId:[2,1],rank:1,mPoints: 40,vPoints: 0),InfoMatch(teamId:[3,4],rank:2,mPoints: 30,vPoints: 0),InfoMatch(teamId:[5,6],rank:3,mPoints: 5,vPoints: 0)]
]
let winners = allMatch.map{$0.filter{$0.rank == 1}}
let losers = allMatch.map{$0.filter{$0.rank != 1}}
print(winners)
打印:
[[__lldb_expr_7.InfoMatch(teamId: Set([1, 2]), rank: 1, mPoints: 200, vPoints: 0)], [__lldb_expr_7.InfoMatch(teamId: Set([3, 4]), rank: 1, mPoints: 0, vPoints: 20)], [__lldb_expr_7.InfoMatch(teamId: Set([1, 2]), rank: 1, mPoints: 40, vPoints: 0)]]
我想要一个返回的数组
teamID: victoryCount: loserCount: mPoints: vPoints:
例如:
teamID:1,2 胜利次数:2 失败者次数:1 mPoints:240 vPoints:10 teamID:3,4 胜利次数:1 失败者次数:2 mPoints:130 vPoints:20 teamID:5,6 胜利次数:0 失败者次数:1 mPoints:5 vPoints:0
【问题讨论】:
-
您在数组中使用数组是否正确?还是应该只是一个
InfoMatches 的数组? -
mPoints 和 vPoints 是什么意思?
-
没错,数组数组,是每队每场比赛的结果。 mPoint是球队获得比赛的和的点。 vPoint 相同,但匹配类型不同。所以如果我有 mPoint,vPoint 为 0,反之亦然
-
teamID是一个数组,是不是包含了主队和客队的id?
-
Teamid 包含一组不同的玩家,例如第一项,playerid 1 和 playerid 2 是一个团队,而玩家 3 和玩家 4 是对面的团队