首页 > 解决方案 > 计算函数返回的最高 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)

我审查了许多搜索如下:-

  1. 能够对返回的 4 个值应用排名,以便使用它返回最高的 2 个或 3 个值,但找不到任何 SwiftUI 代码来实现这一点。

  2. 我找到了可以应用简单排序的代码,但没有任何东西可以让我选择最高的 2 或 3 个值。

  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
    }

标签: swiftfunctionclasshighest

解决方案


假设你有一个数字数组,我会这样做

let highestNumbersToAdd = 2
arrayWithPoints.sort
let total = arrayWithPoints[...highestNumbersToAdd].reduce(0, +)

推荐阅读