我正在尝试创建一个函数,该函数接受一个Int数组,并返回一个原始数组中所有偶数的新数组。
我一直在摸索这段代码(我是一个非常新的初学者)
let numberArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
var newArray: [Int] = []
func newInt(newEven: Int, newArray: [Int]) -> Int {
for newEven in numberArray{
var index = 0
index += 1
if newEven % 2 == 0 {
newArray.insert(newEven, at:[index])
}
return newEven
}
}
print(newArray)
答案 0 :(得分:3)
这是一个好的开始!这里有一些指针:
格式化需要一些工作。通常,每个新作用域({ ... }
)都应引入新的缩进层,如下所示:
let numberArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
var newArray: [Int] = []
func newInt(newEven: Int, newArray: [Int]) -> Int {
for newEven in numberArray{
var index = 0
index += 1
if newEven % 2 == 0 {
newArray.insert(newEven, at:[index])
}
return newEven
}
}
print(newArray)
现在我们可以进行一些观察:
1. index
的作用域为for
循环体,并且将始终具有相同的值0
,然后是下一行之后的1
。
2. return语句在for
循环体内,并且是无条件的。此函数将始终返回numberArray
的第一个元素的值
3.该函数的返回类型为Int
。但是在您的问题中,您声明要让它返回所有偶数的数组。因此,您的返回类型必须为Array<Int>
(又称[Int]
),而不仅仅是Int
。
此函数存在一些会阻止编译的错误:
numberArray
为空,并且从未输入for
循环主体,那么您就不会点击return
语句。一旦控制到达函数末尾,应返回什么值?没有定义,所以这是一个错误。在Swift中,通过函数的所有代码路径都必须返回一个值。 (Void函数除外,该函数在末尾隐式不返回任何内容)Array.insert(_:at:)
调用[index]
,第二个参数是类型为Array<Int>
的数组文字。应该只是index
。newArray
的参数,该参数在全局变量newArray
之前的行上带有阴影。全局变量不是必需的,您应该将其删除。numberArray
上运行,但是没有通过参数明确地将其用作输入。您不应使用参数来硬编码对诸如numberArray
之类的全局变量的引用。newEven
未使用,并被for
循环的局部变量所遮盖。newInt(newEven:newArray:)
没有描述函数的作用。考虑一个像func allEvens(in input: [Int]) -> [Int]
Array.insert(_:at:)
。您可以简单地使用Array.append
,它将自动将元素追加到数组的末尾。func allEvens(in input: [Int]) -> [Int]
input
数组时,请检查每个数字是否偶数,如果是偶数,则将其附加到evens
数组中。evens
数组。答案 1 :(得分:0)
AddEventHandler("f:getPlayer", function(user, cb)
if(Users and cb)then
if(Users[user])then
cb(Users[user])
else
cb(nil)
end
else
cb(nil)
end
end)
这应该返回一个带有偶数的新数组。
答案 2 :(得分:0)
正如LeoDabus在他的评论中提到的那样,您正在寻找的功能已经包含在Swift的标准库中,因此实际上并不需要编写专用的功能来完成该任务。这是您的操作方式:
let numberArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
let newArray = numberArray.filter { $0.isMultiple(of: 2) }
print(newArray) // [2, 4, 6, 8, 10]
在这种情况下,您正在使用filter
是否$0
(其中$0
是数组中的元素)是否是参数中指定数字的倍数,情况2。
您看到in the documentation,isMultiple(of:)
返回Bool
(true
或false
)。这是签名:
func isMultiple(of other: Self) -> Bool
我建议您浏览this post,其中涉及map
,filter
和reduce
的主题。从Swift入门时,这些都是有用的知识。
此外,我发现Dash在浏览Swift的文档时非常有帮助。
我应该更彻底地阅读您的问题,因为我错过了您必须循环执行的部分。 Swift有一个很酷的方法,叫做forEach
,我非常喜欢。使用该方法,将看起来像这样:
func filter(array: [Int], forMultiplesOf multiple: Int) -> [Int] {
// Create a landing spot for whatever is a multiple...it starts as empty
var newArray: [Int] = []
// This is not the most compact way, but it satisfies the loop constraint
array.forEach { number in
if number % multiple == 0 {
newArray.append(number)
}
}
// Once you're done with the loop, then return the new array you declared at the beginning
return newArray
}
您会这样称呼它:
let newArrayUsingFunction = filter(array: numberArray, forMultiplesOf: 2)
您在这里所做的是将2个参数传递给函数(数组和多个)以返回一个Ints数组。查看代码中的注释以了解发生了什么
答案 3 :(得分:-1)
很快,有太多方法可以存档此功能。请检查以下代码。
var numberArray = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
func newInt() -> [Int] {
/**************************************
If you want to use the index then, you can use Enumerated() function.
It will return the index with the object at index.
SO, you can use this function as follow
for (index,number) in numberArray.enumerated(){
print(index, Number)
}
******************************************/
var tempArr = [Int]()
for number in numberArray{
if number % 2 == 0 {
tempArr.append(number)
}
}
return tempArr
}
numberArray = newInt(Array: numberArray)
print(numberArray)