数组示例
[
[
"Francis",
"Chartrand",
"email@email.com"
],
[
"Francis",
"Chartrand",
"second_email@email.com"
],...
]
想要的结果
"email@email.com, second_email@email.com, ..."
我的解决方案(两个循环)
array.map{|a| a[2]}.join(", ")
是否可以通过一个循环执行此操作?
答案 0 :(得分:5)
使用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"
但是,这只是学术性的事情,因为map
/ join
更快,更易读。见this benchmark:
user system total real
map/join 1.440000 0.000000 1.440000 ( 1.441858)
inject 2.220000 0.000000 2.220000 ( 2.234554)
答案 1 :(得分:0)
这是一种方法,但可能不会特别快。
s = ''
array.flatten.each_slice(3) {|e| s += e.last + ', '}
s.chop.chop
这是另一个:
array.transpose[2].join(', ')
我假设您想要整个阵列的单个电子邮件地址字符串。