我有类似下面的代码
let myNums = getXYZ(nums: [1,2,3,4,5])
func getXYZ(nums: [Int]) -> [Int] {
let newNum = nums.map { (num) -> Int in
if num == 2 {
//do something and continue execution with next element in list like break/fallthrough
return 0
}
return num
}
return newNum
}
print(myNums)`
这会打印[1,0,3,4,5]
但是我希望输出为[1,3,4,5]。如何排除2?我想更改使用的if语句,使其在看到数字2时不包含在数组中
我必须在这里使用.map,但要排除2 ..是否有可能
请让我知道
答案 0 :(得分:1)
我只是按照您的问题进行了filter
的操作,您想通过删除另一个数字来filter
个数字。
var myNums = [1, 2, 3, 4, 5]
let excludeNums = [2]
let newNum = myNums.filter({ !excludeNums.contains($0) })
print(newNum) //1, 3, 4, 5
如果需要绘制地图,可以先做map
,然后再做filter
。
let newNum = myNums.map({ $0*2 }).filter({ !excludeNums.contains($0) })
print(newNum) //4, 6, 8, 10
这映射为既乘以2
,又通过从列表中删除新的2
进行过滤。如果要删除首字母2
,则必须先过滤,然后再映射。由于两者都返回[Int]
,因此您可以根据需要以任何顺序调用操作。
答案 1 :(得分:1)
filter
比map
更适合您的用例。
如果您只想排除1个数字:
func getXYZ(nums: [Int]) -> [Int] {
return nums.filter { $0 != 2 }
}
如果要排除数字列表,请将这些排除项存储在Set
中,因为Set.contains
在O(1)
时间运行,而Array.contains
在{{1}时间运行}时间。
O(n)
答案 2 :(得分:0)
根据@koropok的建议,我必须进行以下更改
nums.compactMap {(num)->整数?在 .... 如果num == 2 { 返回零 }
答案 3 :(得分:0)
我建议您使用过滤器而不是地图:
let myNums = [1,2,3,4,5]
let result1 = myNums.filter{ return $0 != 2 }
print(result1) // This will print [1,3,4,5]
如果必须使用地图,请使用compactMap:
let result2 = myNums.compactMap { return $0 == 2 ? nil : $0 }
print(result2) // This will print [1,3,4,5]
希望这会有所帮助