Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用映射进行迭代时排除数组中的元素_Ios_Arrays_Swift_Array Map - Fatal编程技术网

Ios 使用映射进行迭代时排除数组中的元素

Ios 使用映射进行迭代时排除数组中的元素,ios,arrays,swift,array-map,Ios,Arrays,Swift,Array 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 ret

我有如下代码

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.有没有可能


请让我知道

我只需做一个
过滤器
,正如您的问题所述,您想通过删除另一个数字来
过滤这些数字

var myNums = [1, 2, 3, 4, 5]
let excludeNums = [2]

let newNum = myNums.filter({ !excludeNums.contains($0) })

print(newNum) //1, 3, 4, 5
如果需要进行映射,可以先进行
映射
,然后进行
过滤

let newNum = myNums.map({ $0*2 }).filter({ !excludeNums.contains($0) })
print(newNum) //4, 6, 8, 10

这映射到将两者相乘
2
,然后通过从列表中删除新的
2
进行过滤。如果要删除初始的
2
,必须先过滤,然后映射。由于两者都返回一个
[Int]
,您可以根据需要按任何顺序调用操作。

我只需按照您的问题所述进行
筛选,您需要通过删除另一个号码来筛选这些号码

var myNums = [1, 2, 3, 4, 5]
let excludeNums = [2]

let newNum = myNums.filter({ !excludeNums.contains($0) })

print(newNum) //1, 3, 4, 5
如果需要进行映射,可以先进行
映射
,然后进行
过滤

let newNum = myNums.map({ $0*2 }).filter({ !excludeNums.contains($0) })
print(newNum) //4, 6, 8, 10

这映射到将两者相乘
2
,然后通过从列表中删除新的
2
进行过滤。如果要删除初始的
2
,必须先过滤,然后映射。由于两者都返回一个
[Int]
,您可以根据需要按任何顺序调用操作。

正如@koropok所建议的,我必须做以下更改

nums.compactMap{(num)->Int?in .... 如果num==2{ 归零
}

根据@koropok的建议,我必须做以下更改

nums.compactMap{(num)->Int?in .... 如果num==2{ 归零
}

我建议您使用过滤器而不是地图:

let myNums = [1,2,3,4,5]
let result1 = myNums.filter{ return $0 != 2 }
print(result1) // This will print [1,3,4,5]
如果一定要使用map,请使用compactMap:

let result2 = myNums.compactMap { return $0 == 2 ? nil : $0 }
print(result2) // This will print [1,3,4,5]

希望这有帮助

我建议您使用过滤器而不是地图:

let myNums = [1,2,3,4,5]
let result1 = myNums.filter{ return $0 != 2 }
print(result1) // This will print [1,3,4,5]
如果一定要使用map,请使用compactMap:

let result2 = myNums.compactMap { return $0 == 2 ? nil : $0 }
print(result2) // This will print [1,3,4,5]

希望这对您的用例有所帮助

过滤器
比映射更合适

如果只想排除1个数字:

func getXYZ(nums: [Int]) -> [Int] {
    return nums.filter { $0 != 2 }
}
如果要排除数字列表,请将这些排除项存储在
集中,因为
Set.contains
O(1)
时间中运行,而
Array.contains
O(n)
时间中运行

func getXYZ(nums: [Int]) -> [Int] {
    let excluded: Set<Int> = [2,4]
    return nums.filter { !excluded.contains($0) }
}
func getXYZ(nums:[Int])->[Int]{
let excluded:Set=[2,4]
返回nums.filter{!excluded.contains($0)}
}

过滤器
比映射更适合您的用例

如果只想排除1个数字:

func getXYZ(nums: [Int]) -> [Int] {
    return nums.filter { $0 != 2 }
}
如果要排除数字列表,请将这些排除项存储在
集中,因为
Set.contains
O(1)
时间中运行,而
Array.contains
O(n)
时间中运行

func getXYZ(nums: [Int]) -> [Int] {
    let excluded: Set<Int> = [2,4]
    return nums.filter { !excluded.contains($0) }
}
func getXYZ(nums:[Int])->[Int]{
let excluded:Set=[2,4]
返回nums.filter{!excluded.contains($0)}
}

使用compactMap并在num==2时返回nil,它表示“nil与返回类型'Int'不兼容”。请尝试koropok对flatMap的建议flatMap被取消,它也会返回相同的错误,即使使用flatMap“nil与返回类型'Int'不兼容”。我尝试了num==2{return nil}正如koropok所说,使用
compactMap
并在闭包中使返回类型可以为null,例如
(num)->Int?
使用compactMap并在num==2时返回nil,它表示“nil与返回类型'Int'不兼容”。尝试koropok对flatMap的建议flatMap会被删除,即使使用flatMap也会返回相同的错误“nil与返回类型'Int'”不兼容。我尝试过如果num==2{return nil}像koropok所说的那样使用
compactMap
,在闭包内部使返回类型可以为null,就像这样
(num)->Int?
你可以对内联闭包使用
速记参数名
。remove(num)->int?并将num==2替换为$0==2。只需对内联闭包使用
速记参数名即可。删除(num)->int?并将num==2替换为$0==2。