【问题标题】:Iterating over multiple arrays in Swift在 Swift 中迭代多个数组
【发布时间】:2016-10-14 13:24:49
【问题描述】:

我希望使用枚举方法在 Swift 中匹配两个不同的数组。所以如果我有:

let array1 = ["a", "b", "c", "d"]
let array2 = ["1", "2", "3", "4"]

我需要返回一个新数组:

newArray = ["1. a1", "2. b2", "3. c3", "4. d4"]

如何制作这样的数组?

【问题讨论】:

  • 不清楚第一个数字的来源。是array2[i] 还是索引?换句话说,当array2是["p", "q", "r", "s"]、["p. ap", "q. bq", "r. cr", "s. ds"]或["1. ap", "2. bq", "3. cr", "4. ds"]时应该是什么结果?
  • 你给出的两个例子中的后者。

标签: ios arrays swift enumerate


【解决方案1】:

您可以为此使用zip 方法:

let res = zip(array1, array2).map {"\($1). \($0)\($1)"}

请注意,这种方法会在开头和结尾重复 array2 中的项目。如果开头的数字应该是索引,请改用以下表达式:

let res = zip(array1, array2).enumerated().map {"\($0+1). \($1.0)\($1.1)"}

【讨论】:

  • 我正在尝试在这个特定问题上明确使用枚举方法。
  • @tjcarney89 enumerated() 本身对单个序列进行操作。 zip 采用两个序列,并将它们合并为一个。可以先使用enumerated,然后抓取索引,应用到第二个序列,但是在第一个序列比第二个序列长的情况下容易出错。
【解决方案2】:

这解决了你的问题

let array1 = ["a", "b", "c", "d"]
let array2 = ["1", "2", "3", "4"]
var newArray: [String] = []

for (index, element) in array1.enumerated() {
    newArray.append("\(array1[index]). \(array2[index])\(array1[index])")
}

【讨论】:

    【解决方案3】:

    在朋友的帮助下,我设法弄明白了:

    var newArray: [String] = []
        for (index, array1) in array1.enumerated() {
            newArray.append("\(index + 1). \(array1)(\(array2[index]))")
        }
        return newArray
    

    谢谢!

    【讨论】:

      猜你喜欢
      • 2018-02-14
      • 1970-01-01
      • 1970-01-01
      • 2010-09-27
      • 1970-01-01
      • 2014-09-12
      • 2019-06-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多