您的位置:首页 > 其它

each-Select

2016-04-30 17:03 417 查看
While Ruby’s 
each
 method is useful, it also comes with an awesome extended family of methods that are even more powerful!

For the next few examples, we’ll work with a slightly more complex data structure. It look like this:

friends = [
{
name: "Diego",
status: "Online"
},
{
name: "Liam",
status: "Away"
},
{
name: "Gloria",
status: "Online"
},
{
name: "Charlie",
status: "Away"
}
]


select
 is similar to 
each
 in that we pass it a block to run on each element in the collection, but the similarities stop there. The important difference is that 
select
 will return a new collection with only the items that
the block returned 
true
 for. It sounds pretty intimidating at first, so let’s walk through an example.

We can use 
select
 to create a new Array filled with only our online friends:

online_friends = friends.select do |friend|
friend[:status] == "Online"
end


Because the block is so short, it would also work well as a one-liner:

online_friends = friends.select{|friend| friend[:status] == "Online"}


select
 will go through each element one at a time, starting with 
{name: “Diego”, status: “Online”}
, passing it to the block we wrote. The block contains a single line: 
friend[:status] == “Online”
.
That line returns either 
true
 or 
false
. If the block returns 
true
, that specific item is added to a new Array that will be returned at the very end of 
select
.
This table shows each step of the process:

 



 

At the very end, 
select
 returns this Array which we save to a new 
online_friends
 variable:

[{ name: "Diego", status: "Online"}, { name: "Gloria", status: "Online"}]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: