使用 join as proc 映射多维数组
Map multidimensional array with join as proc
我可以将参数传递给传递给 map 方法的符号吗?
代码:
[["a", "airway", "sarsaparilas"], ["a", "sarsaparilas", "airway"]].map!(&:join)
结果:
["aairwaysarsaparilas", "asarsaparilasairway"]
我感兴趣的结果:
["a airway sarsaparilas", "a sarsaparilas airway"]
我知道如何分别使用这些方法,但这次我对符号解决方案感兴趣:)
唯一的方法是创建一个方法来做到这一点。
def my_join(a)
a.join(" ")
end
arr = [["a", "airway", "sarsaparilas"], ["a", "sarsaparilas", "airway"]]
arr.map &method(:my_join) # => ["a airway sarsaparilas", "a sarsaparilas airway"]
当然,这似乎并没有比使用 proc
好多少
my_join = proc {|a| a.join(" ") }
arr.map &my_join # => ["a airway sarsaparilas", "a sarsaparilas airway"]
你可以简单地传入一个块,而不是写 &:join
:
a = [["a", "b", "c"], ["d", "e", "f"]]
a.map { |x| x.join(' ') } # => ["a b c", "d e f"]
&:join
语法只是创建在其参数上调用 .join
的块的快捷方式,但该语法并非适用于所有情况。
您可以定义 Array::to_proc
以使用数组而不是符号:
class Array
def to_proc
->(element) { element.send(*self) }
end
end
现在你可以这样使用了:
a=[["a", "airway", "sarsaparilas"], ["a", "sarsaparilas", "airway"]]
a.map &[:join] # => ["aairwaysarsaparilas", "asarsaparilasairway"]
a.map &[:join, ' '] # => ["a airway sarsaparilas", "a sarsaparilas airway"]
我不建议这样做,但如果你坚持,这是一种方法:
$, = " "
[["a", "airway", "sarsaparilas"], ["a", "sarsaparilas", "airway"]].map!(&:join)
#=> ["a airway sarsaparilas", "a sarsaparilas airway"]
如有必要,您可以在执行此操作后将 $,
恢复为默认值。
$, = nil
can I pass argument, to symbol
有人为此创建了 gem:
require 'ampex'
arr = [["a", "airway", "sarsaparilas"], ["a", "sarsaparilas", "airway"]]
p arr.map!(&X.join(' '))
--output:--
["a airway sarsaparilas", "a sarsaparilas airway"]
你必须写 &X.
而不是 :
我可以将参数传递给传递给 map 方法的符号吗?
代码:
[["a", "airway", "sarsaparilas"], ["a", "sarsaparilas", "airway"]].map!(&:join)
结果:
["aairwaysarsaparilas", "asarsaparilasairway"]
我感兴趣的结果:
["a airway sarsaparilas", "a sarsaparilas airway"]
我知道如何分别使用这些方法,但这次我对符号解决方案感兴趣:)
唯一的方法是创建一个方法来做到这一点。
def my_join(a)
a.join(" ")
end
arr = [["a", "airway", "sarsaparilas"], ["a", "sarsaparilas", "airway"]]
arr.map &method(:my_join) # => ["a airway sarsaparilas", "a sarsaparilas airway"]
当然,这似乎并没有比使用 proc
好多少my_join = proc {|a| a.join(" ") }
arr.map &my_join # => ["a airway sarsaparilas", "a sarsaparilas airway"]
你可以简单地传入一个块,而不是写 &:join
:
a = [["a", "b", "c"], ["d", "e", "f"]]
a.map { |x| x.join(' ') } # => ["a b c", "d e f"]
&:join
语法只是创建在其参数上调用 .join
的块的快捷方式,但该语法并非适用于所有情况。
您可以定义 Array::to_proc
以使用数组而不是符号:
class Array
def to_proc
->(element) { element.send(*self) }
end
end
现在你可以这样使用了:
a=[["a", "airway", "sarsaparilas"], ["a", "sarsaparilas", "airway"]]
a.map &[:join] # => ["aairwaysarsaparilas", "asarsaparilasairway"]
a.map &[:join, ' '] # => ["a airway sarsaparilas", "a sarsaparilas airway"]
我不建议这样做,但如果你坚持,这是一种方法:
$, = " "
[["a", "airway", "sarsaparilas"], ["a", "sarsaparilas", "airway"]].map!(&:join)
#=> ["a airway sarsaparilas", "a sarsaparilas airway"]
如有必要,您可以在执行此操作后将 $,
恢复为默认值。
$, = nil
can I pass argument, to symbol
有人为此创建了 gem:
require 'ampex'
arr = [["a", "airway", "sarsaparilas"], ["a", "sarsaparilas", "airway"]]
p arr.map!(&X.join(' '))
--output:--
["a airway sarsaparilas", "a sarsaparilas airway"]
你必须写 &X.
而不是 :