如何从函数返回多个值并将其分配给数组?

时间:2017-12-21 17:58:20

标签: arrays swift function

我对Swift有疑问。 这是我的代码:

var theArray = [1, 2, 3]

aFunction(value: 2)

func aFunction(value: Int) -> (Int, Int, Int){
    var value1 = value * 2
    var value2 = value * 4
    var value3 = value * 8

    return theArray[0] = value1
    return theArray[1] = value2
    return theArray[2] = value3
}

有没有办法分配一个来自函数的值并将其分配给一个数组?将函数值赋给 theArray

有哪些有用的模式

5 个答案:

答案 0 :(得分:1)

由于您似乎希望将结果作为数组,为什么不返回数组?

func aFunction(value: Int) -> [Int] {
    return [ value * 2, value * 4, value * 8 ]
}

let theArray = aFunction(value: 2)

答案 1 :(得分:1)

您的函数返回一个数组或返回一个元组。如果你返回一个元组,一旦你得到了值,没有什么能阻止你把它包装成一个数组:

import PlaygroundSupport
import UIKit

var theArray = [1, 2, 3]

func aFunction(value: Int) -> (Int, Int, Int){
  let value1 = value * 2
  let value2 = value * 4
  let value3 = value * 8
  return (value1, value2, value3)
}

var (x,y,z) = aFunction(value: 2)
theArray = [x,y,z]
print(theArray)

输出:

[4, 8, 16]

答案 2 :(得分:1)

您可以使用地图功能:

let value = 3
let theArray = [1, 2, 3].map() { $0 * value }

当然,您可以使用theArray和value作为参数来嵌入此函数

这应该对OP更好地回答:

let value = 2 
var newValue = 1 
var theArray = [1, 2, 3] 
theArray = theArray.map() { (number: Int) -> Int in newValue = newValue * value ; return number * newValue }

答案 3 :(得分:0)

由于您的代码完全错误且无法编译,我将提供涵盖您所有方面的答案:

首先你需要返回Array,而不是元组读取元组部分here

第二件事是你可以直接在你的代码中调用map函数,这样你就不需要创建自定义函数了。看看这个link - 它的美丽

var theArray = [1, 2, 3]

let newArray: [Int] = theArray.enumerated().map { (index, element) in

    switch index {
    case 0:
       return element*2
    case 1:
        return element*4
    case 2:
        return element*8
    default:
        return 0 // You don't really need to do this when you know your Array contains your values. 
    }
}

其他有用的方法可能是迭代theArray:

var theArray = [1, 2, 3]

var newArray: [Int] = []
var iterator = 2
for element in theArray {
    iterator = iterator * 2
    newArray.append(element*iterator)
}
print(newArray)

将这些解决方案包装到函数中并返回newArray属性。

答案 4 :(得分:-2)

一种好方法可能是在阵列上创建自己的更新块扩展。

  extension Array {
    func normalized(update: (Int, Int) -> Int) -> [Int] {
      var updateArray: [Int] = []
      for (index, element) in self.enumerated() {
        guard let temp = element as? Int else { break }
        updateArray.append(update(index, temp))
      }
      return updateArray
    }
  }

请注意,此规范化实例方法使用包含数组位置和值的元组。

  var theArray = [1,2,3]

我宣布'我们的'用作将条目乘以2的映射。

  func multiplyMapByTwo(index: Int, value: Int) -> Int {
    let map = [0: 2, 1: 4, 2: 8]
    guard let val = map[index] else { return 0 }
    return 2*val
  }

这是有趣的部分,我们现在可以使用我们刚刚创建的乘法和地图函数来规范化每个阵列的值。

  theArray = theArray.normalized {
    return multiplyMapByTwo(index: $0, value: $1)
  }

  print(theArray)

theArray 将有 [4,8,16]