2014-11-04 94 views
1

的阵列时扫描所有/特定数组值以下是示例代码:滤波阵列

var myArray = [["one", "two"], ["three", "four"]] 

var filteredArray = myArray.filter{ value in value[1] != "four"} 

filteredArray //[["one", "two"]] 

此代码应该过滤掉包含“四”任何阵列。它正确地做到了,但仅仅是因为我将值定位到特定的数组[1],因为我知道它包含“四个”。 我应该如何重新格式化这段代码,所以我不需要指定特定的数组,所以它会扫描那里的所有值?当使用“for循环”时,我们可以使用一个声明的“i”变量。但是如何用.filter函数做类似?另外,更具体地说,我如何重新设置这段代码的格式,以便过滤数组并排除所有具有“四个”但具体为第二个值(index [1])的数组,而不是如果它们具有“四个”任何其他指数的位置,如以前的要求。再次在没有“我”变量的情况下,我不知道该怎么做。感谢您的帮助。

回答

1

知道,过滤器回调在每次迭代接收内部阵列,我们可以使用reduce该阵列上以检查是否它包含four字符串:,

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

    return count == 0 
} 

reduce闭合如果一个或多个元件是four,返回值将是一个大于零的整数。

+0

智能帮我搞定了tsk – 2014-11-04 16:19:59