Swift 每隔一个项目追加到数组
Swift Append every second item to Array
我有一个 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"]
尝试使用模运算符 ( % )
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)
输出:
[Aug 12, Oct 12]
也可以使用swift数组filter
方法得到过滤后的数组,
monthData = months.filter{ (dataValue) in (find(months, dataValue)! % 2 != 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 { [=10=].index % n == 0 ? [=10=].element : nil }
// filteredArray = ["0", "2", "4", "6", "8"]
Swift 3(基于@maxkonovalov 的回答)
let array = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
let step = 2
let filtered = array.enumerated().flatMap { [=10=].offset % step == 0 ? [=10=].element : nil }
// filtered: ["0", "2", "4", "6", "8"]
要解决这个问题,您可以使用 Strides class and a 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 数组 "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"]
尝试使用模运算符 ( % )
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)
输出:
[Aug 12, Oct 12]
也可以使用swift数组filter
方法得到过滤后的数组,
monthData = months.filter{ (dataValue) in (find(months, dataValue)! % 2 != 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 { [=10=].index % n == 0 ? [=10=].element : nil }
// filteredArray = ["0", "2", "4", "6", "8"]
Swift 3(基于@maxkonovalov 的回答)
let array = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
let step = 2
let filtered = array.enumerated().flatMap { [=10=].offset % step == 0 ? [=10=].element : nil }
// filtered: ["0", "2", "4", "6", "8"]
要解决这个问题,您可以使用 Strides class and a 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)