学习Ruby中的数组过滤器

323 阅读2分钟

我们可以把数组看作是数据库,或者更确切地说,是数据库中的一个表。数组的主要用途是在一个实体中存储相关的项目,使你能够有效地管理它们。

本教程将说明如何使用选择、查找和拒绝方法对数组的结果进行过滤。

使用选择方法

我们使用select语句来过滤数组中的元素,寻找符合特定条件的子集。

select方法返回一个新的数组,其中包含所有条件评估为真的值。

选择方法接受一个块来指定条件。

比如说:

frameworks = ["React","Angular","Vue JS","Svelte"]

print frameworks.select {|i| i.length > 6}

在上面的例子中,我们使用select方法来过滤掉长度大于6的字符串。

块中的代码将遍历数组中的每个项目,检查条件。如果是真的,那么select语句将把它添加到一个新的集合中。

原地选择

选择语句不影响原始数组。它创建了一个新的数组,其中的项目符合指定的条件。

为了影响原数组,我们可以使用select!方法。

frameworks = ["React","Angular","Vue JS","Svelte"]

frameworks.select! {|i| i.length > 6}

print frameworks

frameworks数组被修改为只包含长度大于6的元素。

=> ["Angular"]

使用查找方法

我们可以使用find方法在数组中找到一个符合特定条件的单一元素。

比如说:

frameworks = [

"React",

"Angular",

"Vue JS",

"Svelte"

]

print frameworks.find {|i| i.length == 5}

find方法将返回指定条件的第一个匹配项。

下面是一个输出的例子:

=> React

如果没有匹配,该方法返回nil。

有时你可能会遇到find_all方法。find_all方法返回所有的匹配对象,而不是一个单一的对象。你可以认为它是select方法的一个别名。

使用拒绝方法

拒绝方法与选择方法完全相反。该方法不包括符合特定条件的值,而是拒绝这些元素。

比如说:

frameworks = ["React","Angular","Vue JS","Svelte"]

print frameworks.reject {|i| i.length > 6}

在上面的例子中,我们删除了所有长度大于6的元素,在我们的例子中,这只是一个单一的对象。

得到的值是这样的:

=> ["React", "Vue JS", "Svelte"]

总结一下

你刚刚学会了如何使用选择、查找和拒绝方法来过滤数组中的元素。