Ios Swift中的数组操作

Ios Swift中的数组操作,ios,swift,Ios,Swift,我有个主意要说 let array = [4,5,7,2,6,8,2,5,7,9,0,1,365,65,33,23,65] 现在当我写下面的代码时 let test = array.drop { (x) -> Bool in x < 10 } 现在输出的数组是:[4,5,7,2,6,8,2,5,7,9,0,1,365,65,33,23,65] 有人能解释为什么会有这种行为吗?请帮助我在上面的代码中遗漏了什么?我正在使用Swift 4.0作为状态: 放下(当:) 通过在谓词

我有个主意要说

let array = [4,5,7,2,6,8,2,5,7,9,0,1,365,65,33,23,65]
现在当我写下面的代码时

let test = array.drop { (x) -> Bool in
    x < 10
}
现在输出的
数组是:[4,5,7,2,6,8,2,5,7,9,0,1,365,65,33,23,65]

有人能解释为什么会有这种行为吗?请帮助我在上面的代码中遗漏了什么?我正在使用Swift 4.0作为状态:

放下(当:)

通过在谓词返回时跳过元素来返回子序列 true并返回其余元素

因此,当闭包返回
false
时,它将停止跳过元素

您所做的似乎是该功能的工作。

如下所述:

放下(当:)

通过在谓词返回时跳过元素来返回子序列 true并返回其余元素

因此,当闭包返回
false
时,它将停止跳过元素


您所做的似乎是函数的工作。

代码不起作用,因为它返回false,并在第一次遇到小于10的值时中断

但是第一个序列直到数字小于10为止。因此,如果插入的数字小于或大于10,则不会删除

因此,对于数组
让数组=[4,5,7,2,6,8,2,5,7,9,0,1365,65,33,23,65]
如果在65或365之后插入13,则不会将其删除

由于数组从小于10的数字开始,它计算值并返回false,因为它较小,循环中断,因此对于条件>10,将不删除任何值

可以使用
过滤器


.

该代码不起作用,因为它返回false,并在第一次遇到小于10的值时中断

但是第一个序列直到数字小于10为止。因此,如果插入的数字小于或大于10,则不会删除

因此,对于数组
让数组=[4,5,7,2,6,8,2,5,7,9,0,1365,65,33,23,65]
如果在65或365之后插入13,则不会将其删除

由于数组从小于10的数字开始,它计算值并返回false,因为它较小,循环中断,因此对于条件>10,将不删除任何值

可以使用
过滤器


.

您想使用
过滤器,而不是
删除

下拉列表(其中:)
的文档中:

通过跳过元素而谓词返回true并返回其余元素来返回子序列

因此,只要
drop
块中的条件为false,就会返回数组的其余部分

您的第一个测试用例似乎是有效的,因为所有<10的值恰好在任何>10的值之前

下面是使用
过滤器的正确解决方案:

let array = [4,5,7,2,6,8,2,5,7,9,0,1,365,65,33,23,65]
let test = array.filter { $0 < 10 }
print(test)
[365,65,33,23,65]


您想使用
过滤器
,而不是
拖放

下拉列表(其中:)
的文档中:

通过跳过元素而谓词返回true并返回其余元素来返回子序列

因此,只要
drop
块中的条件为false,就会返回数组的其余部分

您的第一个测试用例似乎是有效的,因为所有<10的值恰好在任何>10的值之前

下面是使用
过滤器的正确解决方案:

let array = [4,5,7,2,6,8,2,5,7,9,0,1,365,65,33,23,65]
let test = array.filter { $0 < 10 }
print(test)
[365,65,33,23,65]


drop
函数实际上是
drop(while:)

为while循环计算条件
x>10
,在您的情况下,是数字4,由于不满足该条件,我们退出
drop
功能

从使用
x<10
的第一个示例中,您很幸运,因为所有小于10的值都位于数组的左侧,因此它工作正常,但它
365
是第一个元素,您将得到与第二个示例相同的结果,它将在计算第一个元素后退出while循环

我建议改用
过滤器
方法:

let test = array.filter { (x) -> Bool in
            return x < 10
           }
// or shorthand expression
let test = array.filter({$0 < 10})

// array is
[4, 5, 7, 2, 6, 8, 2, 5, 7, 9, 0, 1]
let test=array.filter{(x)->Bool-in
返回x<10
}
//还是速记
let test=array.filter({$0<10})
//数组是
[4, 5, 7, 2, 6, 8, 2, 5, 7, 9, 0, 1]
供参考:
drop
函数实际上是
drop(while:)

为while循环计算条件
x>10
,在您的情况下,是数字4,由于不满足该条件,我们退出
drop
功能

从使用
x<10
的第一个示例中,您很幸运,因为所有小于10的值都位于数组的左侧,因此它工作正常,但它
365
是第一个元素,您将得到与第二个示例相同的结果,它将在计算第一个元素后退出while循环

我建议改用
过滤器
方法:

let test = array.filter { (x) -> Bool in
            return x < 10
           }
// or shorthand expression
let test = array.filter({$0 < 10})

// array is
[4, 5, 7, 2, 6, 8, 2, 5, 7, 9, 0, 1]
let test=array.filter{(x)->Bool-in
返回x<10
}
//还是速记
let test=array.filter({$0<10})
//数组是
[4, 5, 7, 2, 6, 8, 2, 5, 7, 9, 0, 1]
供参考: