ruby中的一切都是对象。Ruby支持许多方法,其中一个任务可以使用多种方法或方式完成。数组是一个对象,其map,each,select,collect,inject,detect是用于一个数组对象的ruby方法。让我们了解这些方法。
一.Map
Map获取可枚举对象和块,为每个元素计算块,然后返回包含计算值的新数组。
[1,2,3,4,5,6,7,8,9,10].map{ |e| e * 5 }
# => [5, 10, 15, 20, 25, 30, 35, 40, 45, 50]
如果你尝试使用map来选择任何特定值,例如e <= 3,那么它将对比每个元素并仅输出结果为true或false
[1,2,3,4,5,6,7,8,9,10].map{ |e| e <= 3 }
# => [true, true, true, false, false, false, false, false, false, false]
二.Select
使用Select块计算数组中的每个元素,并把返回为ture的值.
[1,2,3,4,5,6,7,8,9,10].select{ |e| e > 5 }
# => [6 ,7, 8, 9, 10]
而且,select会返回一个语句为true的元素。
[1,2,3,4,5,6,7,8,9,10].select{ |e| e * 3 }
# => [1,2,3,4,5,6,7,8,9,10]
三.Collect
Collect类似于Map,它接受可枚举对象和块,为每个元素计算块,然后返回带有计算值的新数组。
[1,2,3,4,5,6,7,8,9,10].collect{ |e| e * 5 }
# => [5, 10, 15, 20, 25, 30, 35, 40, 45, 50]
如果果你尝试使用collect来选择任何特定值,例如n <= 3,那么它将对比每个元素并仅输出结果为true或false
[1,2,3,4,5,6,7,8,9,10].collect{ |e| e <= 3 }
# => [true, true, true, false, false, false, false, false, false, false]
四.Each
Each将使用块来判断每个数组,并返回原始数组而不是计算的数组。
1,2,3,4,5,6,7,8,9,10].each{ |e| print "#{e}!" e * 3 }
1!2!3!4!5!6!7!8!9!10! => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
如果你尝试使用每个选择任何特定值,例如e <= 3,那么它将判断每个元素但返回原始数组
五.Inject
获取累加器(sun)并将其更改为数组中的元素的次数。 返回累加器的最终值。 如果没有为accumlator明确指定初始值,则使用collection的第一个元素作为accumulator的初始值。
[1,2,3,4,5,6,7,8,9,10].inject{ |sum, e| sum += e }
# => 55
[1,2,3,4,5,6,7,8,9,10].inject(15){ |sum, e| sum += e }
# => 70
六.Detect
Detect等于select.first,就这么简单。 Detect使用块返回true的每个元素计算块,但仅返回第一个元素作为结果。
[1,2,3,4,5,6,7,8,9,10].detect{ |e| e > 5 }
# => 6
而且,detect将返回语句为true的第一个元素。
[1,2,3,4,5,6,7,8,9,10].detect{ |e| e * 3 }
# => 1
文章评论