Swift将每隔一个项目的内容添加到数组中。

6
我有一个Swift数组"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"]
5个回答

6

尝试使用模运算符(%)

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日]


3

您还可以使用Swift数组filter方法来获取筛选出的数组,

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

2

Swift 3 (based on @maxkonovalov's answer)

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"]

0

有一种更紧凑的方法可以按元素索引过滤数组。

以下是如何在数组中找到每个第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"]

0
为了解决这个问题,您可以使用一个Strides类和一个map方法
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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接