如何通过在 swift playground 中传递 Int 数组来创建求和函数并调用它?

Posted

技术标签:

【中文标题】如何通过在 swift playground 中传递 Int 数组来创建求和函数并调用它?【英文标题】:How to create a summation function and call it, by passing Int array in swift playground? 【发布时间】:2019-03-12 09:11:50 【问题描述】:

我创建了一个执行数字求和的函数,方法是接受 Int 数组并将元素的总和作为整数值返回。下面是我的代码,我检查它在逻辑上是正确的,但是在运行时提到,控制台中的“索引超出范围”和“

错误:执行被中断,原因:EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)。

代码:

import UIKit
var x=[Int]()
var i=0
func dosomething(y:[Int])->Int

    for index in 0..<y.count
        if index==0
            x[index]=0
            x[index]=x[index]+y[index]
            i=x[index]
            
        else
            x[index]=x[index-1]+y[index]
           i=x[index]
        
       
    return i


dosomething(y:[1,2,3])

【问题讨论】:

为什么你的两个方法同名? 您可以使用reduce func,如第一个答案所示。我还建议使用正确的变量名,因为 var555var55 非常令人困惑。 您应该问自己的问题:var555 有多大?? 你能解释一下你的逻辑吗?我不明白为什么一组数字的总和有这么复杂的逻辑。 如果数组不够大,你不能只使用下标赋值,尤其是当它像你的var555 一样为空时。 var555[index2]=0 — 无效代码。 【参考方案1】:

你可以直接使用像这样的高阶函数

[1,2,3].reduce(0, +)

【讨论】:

是的,我看到我们可以这样做,但想知道我的代码出了什么问题 @user28434 你说得对,你的 var555 是空的,那么你不能使用像这样的下标赋值 var555[index2]=0【参考方案2】:

您收到错误,因为 X 数组为空并且您尝试设置不存在的值。您应该首先创建该值,然后将其更改为您想要的,以这种方式更改您的方法:

func dosomething(y:[Int])->Int
    x = [Int]()
    for index in 0..<y.count
        if index==0
            x.append(0)
            x[index]=x[index]+y[index]
            i=x[index]
        
        else
            x.append(0)
            x[index]=x[index-1]+y[index]
            i=x[index]
        
    
    return i

【讨论】:

你不需要在append之后设置x[index]=0 谢谢,帮了大忙。

以上是关于如何通过在 swift playground 中传递 Int 数组来创建求和函数并调用它?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift Playgrounds 中睡觉并获取最新的异步值?

如何在 Playground 中导入 Swift 包?

将图像添加到 swift Playground [iPad]

如何在 XCode 8 Playgrounds 中使用 Swift 2.3?

如何在 Playground 中使用 Swift 包管理器

如何使用 Swift 在 Playground 中获取用户交互事件