Fra*_*and 3 ruby theory arrays
数组例子
[
[
"Francis",
"Chartrand",
"email@email.com"
],
[
"Francis",
"Chartrand",
"second_email@email.com"
],...
]
Run Code Online (Sandbox Code Playgroud)
想要结果
"email@email.com, second_email@email.com, ..."
Run Code Online (Sandbox Code Playgroud)
我的解决方案(两个循环)
array.map{|a| a[2]}.join(", ")
Run Code Online (Sandbox Code Playgroud)
是否可以通过一个循环执行此操作?
使用Enumerable#inject我们可以在一个循环中完成任务:
a = [
["Francis", "Chartrand", "email@email.com"],
["Francis", "Chartrand", "second_email@email.com"]
]
a.inject(nil) {|str, arr| str ? (str << ', ' << arr[2]) : arr[2].dup}
#=> "email@email.com, second_email@email.com"
Run Code Online (Sandbox Code Playgroud)
但是,这只是一个学术性的东西,因为map/ join更快,更可读.看到这个基准:
user system total real
map/join 1.440000 0.000000 1.440000 ( 1.441858)
inject 2.220000 0.000000 2.220000 ( 2.234554)
Run Code Online (Sandbox Code Playgroud)