swift - 计算函数返回的最高 2 和 3 个值
问题描述
在一个类中,我有 4 个返回单个值的函数(参见下面的代码)。
我需要添加 2 个额外的函数来计算以下总和:-
2个最高数字的总和
3个最高数字的总和
然后,这些总数将用于应用程序中的其他计算。
以下应注意,因为超过 1 个数字可能具有相同的值,但只有相关数字需要包含在总数中。以下是所需内容的示例:
两个最高值
如果回报是 3、3、2、1,那么回报应该是 6 (3 + 3)
如果回报是 3, 3, 3, 2 那么回报应该是 6 (3 + 3)
如果回报是 4、3、3、1,那么回报应该是 7 (4 + 3)
三个最高值
如果回报是 3、3、2、2,那么回报应该是 8 (3 + 3 + 2)
如果回报是 4、3、3、3,那么回报应该是 10 (4 + 3 + 3)
如果回报是 3, 3, 3, 3 那么回报应该是 9 (3 + 3 + 3)
我审查了许多搜索如下:-
能够对返回的 4 个值应用排名,以便使用它返回最高的 2 个或 3 个值,但找不到任何 SwiftUI 代码来实现这一点。
我找到了可以应用简单排序的代码,但没有任何东西可以让我选择最高的 2 或 3 个值。
我可以为每个值使用许多嵌套的 if 函数来将值与其他值进行比较并确定最高的 2 或 3 个值,但这将是很多代码来实现在 Excel 等中相对简单的计算。
SwiftUI 中是否有任何“标准”功能使我能够实现他的功能,或者上面 3 的冗长方式是唯一可以实现的方式?
希望这有意义吗?
func p1h1points(hole1par: Int16, hole1index: Int16) -> Int16 {
let gross = p1hole1gross
let par = hole1par
let shot = p1h1shots(hole1index: hole1index)
let net = Int16(gross) - Int16(shot)
let points = par - net
if p1hole1gross == 0 {
return 0
}
if points < -1 {
return 0
}
if points == -1 {
return 1
}
if points == 0 {
return 2
}
if points == 1 {
return 3
}
if points == 2 {
return 4
}
if points == 3 {
return 5
}
if points == 4 {
return 6
}
if points == 5 {
return 7
}
if points == 6 {
return 8
}
if points == 7 {
return 9
}
return 0
}
func p2h1points(hole1par: Int16, hole1index: Int16) -> Int16 {
let gross = p2hole1gross
let par = hole1par
let shot = p2h1shots(hole1index: hole1index)
let net = Int16(gross) - Int16(shot)
let points = par - net
if p2hole1gross == 0 {
return 0
}
if points < -1 {
return 0
}
if points == -1 {
return 1
}
if points == 0 {
return 2
}
if points == 1 {
return 3
}
if points == 2 {
return 4
}
if points == 3 {
return 5
}
if points == 4 {
return 6
}
if points == 5 {
return 7
}
if points == 6 {
return 8
}
if points == 7 {
return 9
}
return 0
}
func p3h1points(hole1par: Int16, hole1index: Int16) -> Int16 {
let gross = p3hole1gross
let par = hole1par
let shot = p3h1shots(hole1index: hole1index)
let net = Int16(gross) - Int16(shot)
let points = par - net
if p3hole1gross == 0 {
return 0
}
if points < -1 {
return 0
}
if points == -1 {
return 1
}
if points == 0 {
return 2
}
if points == 1 {
return 3
}
if points == 2 {
return 4
}
if points == 3 {
return 5
}
if points == 4 {
return 6
}
if points == 5 {
return 7
}
if points == 6 {
return 8
}
if points == 7 {
return 9
}
return 0
}
func p4h1points(hole1par: Int16, hole1index: Int16) -> Int16 {
let gross = p4hole1gross
let par = hole1par
let shot = p4h1shots(hole1index: hole1index)
let net = Int16(gross) - Int16(shot)
let points = par - net
if p4hole1gross == 0 {
return 0
}
if points < -1 {
return 0
}
if points == -1 {
return 1
}
if points == 0 {
return 2
}
if points == 1 {
return 3
}
if points == 2 {
return 4
}
if points == 3 {
return 5
}
if points == 4 {
return 6
}
if points == 5 {
return 7
}
if points == 6 {
return 8
}
if points == 7 {
return 9
}
return 0
}
解决方案
假设你有一个数字数组,我会这样做
let highestNumbersToAdd = 2
arrayWithPoints.sort
let total = arrayWithPoints[...highestNumbersToAdd].reduce(0, +)
推荐阅读
- javascript - 在 Pug/Jade 模板引擎中显示图像
- python - 使用 for 循环和列表进行值提取
- python - Why is my python Mario program less comfortable ignoring the spaces?
- php - 在碳 php 中获取新月份的第一周
- php - 重叠 htaccess 命令?
- javascript - 在 reactjs 事件处理中传递 {SomeFunction} 和 {SomeFunction()} 的区别
- python - 使用 @dataclass 创建的类中的 Python 实例属性分配
- node.js - 容器化区块链微服务
- ruby-on-rails - 在*不同*控制器的方法之间传递参数
- php - Laravel excel 保存在存储目录中,而不是作为我的图像保存在存储上传中