使用地图迭代时排除数组中的元素
Exclude element in array when iterating using map
我有如下代码
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.. 有没有可能
请告诉我
我只是按照你的问题描述做一个filter
,你想通过删除另一个数字来filter
这些数字。
var myNums = [1, 2, 3, 4, 5]
let excludeNums = [2]
let newNum = myNums.filter({ !excludeNums.contains([=10=]) })
print(newNum) //1, 3, 4, 5
如果您需要制作地图,可以先制作 map
然后 filter
。
let newNum = myNums.map({ [=11=]*2 }).filter({ !excludeNums.contains([=11=]) })
print(newNum) //4, 6, 8, 10
这映射为将两者乘以 2
,然后通过从列表中删除新的 2
进行过滤。如果你想删除初始 2
你必须先过滤然后映射。由于 return 和 [Int]
您可以根据需要以任何顺序调用操作。
根据@koropok 的建议,我必须进行以下更改
nums.compactMap { (num) -> Int?在
....
如果数字 == 2 {
return 无
}
我建议你使用 filter 而不是 map:
let myNums = [1,2,3,4,5]
let result1 = myNums.filter{ return [=10=] != 2 }
print(result1) // This will print [1,3,4,5]
如果一定要用map,那就用compactMap:
let result2 = myNums.compactMap { return [=11=] == 2 ? nil : [=11=] }
print(result2) // This will print [1,3,4,5]
希望对您有所帮助
filter
比 map
更适合您的用例。
如果您只想排除 1 个号码:
func getXYZ(nums: [Int]) -> [Int] {
return nums.filter { [=10=] != 2 }
}
如果要排除数字列表,请将这些排除项存储在 Set
中,因为 Set.contains
在 O(1)
时间内运行,而 Array.contains
在 [=] 内运行18=]时间.
func getXYZ(nums: [Int]) -> [Int] {
let excluded: Set<Int> = [2,4]
return nums.filter { !excluded.contains([=11=]) }
}
我有如下代码
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.. 有没有可能
请告诉我
我只是按照你的问题描述做一个filter
,你想通过删除另一个数字来filter
这些数字。
var myNums = [1, 2, 3, 4, 5]
let excludeNums = [2]
let newNum = myNums.filter({ !excludeNums.contains([=10=]) })
print(newNum) //1, 3, 4, 5
如果您需要制作地图,可以先制作 map
然后 filter
。
let newNum = myNums.map({ [=11=]*2 }).filter({ !excludeNums.contains([=11=]) })
print(newNum) //4, 6, 8, 10
这映射为将两者乘以 2
,然后通过从列表中删除新的 2
进行过滤。如果你想删除初始 2
你必须先过滤然后映射。由于 return 和 [Int]
您可以根据需要以任何顺序调用操作。
根据@koropok 的建议,我必须进行以下更改
nums.compactMap { (num) -> Int?在 .... 如果数字 == 2 { return 无 }
我建议你使用 filter 而不是 map:
let myNums = [1,2,3,4,5]
let result1 = myNums.filter{ return [=10=] != 2 }
print(result1) // This will print [1,3,4,5]
如果一定要用map,那就用compactMap:
let result2 = myNums.compactMap { return [=11=] == 2 ? nil : [=11=] }
print(result2) // This will print [1,3,4,5]
希望对您有所帮助
filter
比 map
更适合您的用例。
如果您只想排除 1 个号码:
func getXYZ(nums: [Int]) -> [Int] {
return nums.filter { [=10=] != 2 }
}
如果要排除数字列表,请将这些排除项存储在 Set
中,因为 Set.contains
在 O(1)
时间内运行,而 Array.contains
在 [=] 内运行18=]时间.
func getXYZ(nums: [Int]) -> [Int] {
let excluded: Set<Int> = [2,4]
return nums.filter { !excluded.contains([=11=]) }
}