Swift将每隔一个项目附加到数组

Posted

技术标签:

【中文标题】Swift将每隔一个项目附加到数组【英文标题】:Swift Append every second item to Array 【发布时间】:2015-10-11 19:53:04 【问题描述】:

我有一个快速数组“Monthdata”,我想在我的月份数组中添加每个第二个值。

var monthData = []
let months = ["Jul 12","Aug 12","Sep 12","Oct 12"]

for month in months 
 self.monthData.append(month)

所以基本上我的monthData数组看起来像:

["Aug 12","Oct 12"]

【问题讨论】:

【参考方案1】:

尝试使用模运算符( % )

var monthData = Array<String>()
let months = ["Jul 12","Aug 12","Sep 12","Oct 12"]

var i : Int = 1

for month in months
    if(i%2 == 0)
        monthData.append(month)
    
    i = i + 1


println(monthData)

输出:

[8 月 12 日,10 月 12 日]

【讨论】:

【参考方案2】:

也可以使用swift数组filter方法获取过滤后的数组,

monthData = months.filter (dataValue) in (find(months, dataValue)! % 2 != 0) 

【讨论】:

【参考方案3】:

Swift 3(基于@maxkonovalov 的回答)

let array = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
let step = 2
let filtered = array.enumerated().flatMap  $0.offset % step == 0 ? $0.element : nil 

// filtered: ["0", "2", "4", "6", "8"]

【讨论】:

【参考方案4】:

有一个更紧凑的版本可以按元素的索引过滤数组。

如何查找数组中每个第 N 个元素的示例(swift 2.0):

let array = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
let n = 2
let filteredArray =  array.enumerate().flatMap  $0.index % n == 0 ? $0.element : nil 

// filteredArray = ["0", "2", "4", "6", "8"]

【讨论】:

【参考方案5】:

要解决这个问题,您可以使用Strides 类和map method:

let months = ["Jul 12","Aug 12","Sep 12","Oct 12"]
let monthData = stride(from: 1, to: months.count, by: 2).map  (value:Int) -> String in
    return months[value]

print(monthData)

【讨论】:

以上是关于Swift将每隔一个项目附加到数组的主要内容,如果未能解决你的问题,请参考以下文章

为啥这个函数每次运行时都会将对象两次附加到数组中?

使用 Swift 将结构附加到数组(在 iOS 中失败,但在 Playgrounds 中失败)

在 Swift 3 中将结构附加到结构数组上

在 Swift 中将项目添加到 Firebase 数组而不首先观察数组

在 Swift 中将模型附加到数组中

你能用 swift 将字符串附加到 Firebase 数组吗