过滤阵列数组时扫描所有/特定数组值

时间:2014-11-04 11:35:37

标签: swift

以下是示例代码:

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"变量,我不知道该怎么做。感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

知道过滤器回调在每次迭代时都会收到内部数组,我们可以在该数组上使用reduce来检查它是否包含four字符串:

var filteredArray = myArray.filter {
    let count = $0.reduce(0) {
        $0 + ($1 == "four" ? 1 : 0)
    }

    return count == 0
}

reduce闭包中,如果一个或多个元素为four,则返回值将为大于零的整数。