如何将函数映射到数组的每个元素?

时间:2017-12-29 03:39:41

标签: arrays ruby strip

我正在使用Ruby 2.4。如何将复杂函数映射到我的字符串数组中的每个元素?功能是

elt.gsub!(/\A\p{Space}+|\p{Space}+\z/, '')

假设“elt”是我的字符串数组中的元素。这是一个美化的“条带”功能。我想将它应用于我的数组中的每个项目。

2 个答案:

答案 0 :(得分:5)

您正在寻找的是块语法。

def word_count(string):
    tokens = string.split()
    n_tokens = len(tokens)
    return n_tokens

大括号内的任何内容都将被视为"功能" new_arr = arr.map { |elt| elt.gsub(/\A\p{Space}+|\p{Space}+\z/, '') } 。对于较长的块,您可以使用map

do .. end

在语义上等同。

答案 1 :(得分:2)

如果您了解.map(&:strip),您可能知道所需的一切,proc或可能转换为proc的任何内容的语法都没有区别(阅读:对{的回复{1}}。)#to_proc回复Symbol,这就是#to_proc有效的原因。 .map(&:strip)回复proc,回归自我。也就是说,以下内容完全有效(#to_proc不需要map就好了),因为它使用的是带有each的条带grep!来修改所有内容,但是为了浓度):

.map(&->(x) { x.gsub!(/\A\p{Space}+|\p{Space}+\z/, '') })