以下是示例代码:
var myArray = [["one", "two"], ["three", "four"]]
var filteredArray = myArray.filter{ value in value[1] != "four"}
filteredArray //[["one", "two"]]
此代码应该过滤掉包含" four"的任何数组。它做得恰当,但仅仅因为我使用值[1]定位特定数组,因为我知道它包含"四"。 我应该如何重新格式化这段代码,以便我不需要指定特定的数组,所以它会扫描那里的所有值?当使用" for循环"时,我们有一个声明的" i"我们可以使用的变量。但是如何与.filter函数类似?
另外,更具体一点,我如何重新格式化这段代码,以便我可以过滤数组并排除所有有"四"但特别是作为他们的第二个值(索引[1])而不是他们有"四个"在先前要求中的任何其他指数位置。再次在没有" i"变量,我不知道该怎么做。感谢您的帮助。
答案 0 :(得分:1)
知道过滤器回调在每次迭代时都会收到内部数组,我们可以在该数组上使用reduce
来检查它是否包含four
字符串:
var filteredArray = myArray.filter {
let count = $0.reduce(0) {
$0 + ($1 == "four" ? 1 : 0)
}
return count == 0
}
在reduce
闭包中,如果一个或多个元素为four
,则返回值将为大于零的整数。