什么是Ruby相当于字符串的map()?

时间:2014-03-22 23:17:18

标签: ruby string-split

如果您想拆分以空格分隔的单词列表,请使用

def words(text)
    return text.split.map{|word| word.downcase}
end

与Python的列表理解类似:

words("get out of here")

返回["get", "out", "of", "here"]。如何将块应用于字符串中的每个字符?

3 个答案:

答案 0 :(得分:23)

使用String#chars

irb> "asdf".chars.map { |ch| ch.upcase }
  => ["A", "S", "D", "F"]

答案 1 :(得分:7)

你在找这样的东西吗?

class String
  def map
    size.times.with_object('') {|i,s| s << yield(self[i])}
  end
end

"ABC".map {|c| c.downcase}       #=> "abc" 
"ABC".map(&:downcase)            #=> "abc"
"abcdef".map {|c| (c.ord+1).chr} #=> "bcdefg"
"abcdef".map {|c| c*3}           #=> "aaabbbcccdddeeefff"

答案 2 :(得分:2)

我认为对你的问题的简短回答是“不,对于一次操作一个角色的字符串,没有像map那样的东西。”以前的回答者在我的书中有最清晰的解决方案;只需通过向类中添加函数定义来创建一个。

BTW,还有String#each_char,它是字符串每个字符的迭代器。在这种情况下,String#chars会得到相同的结果,因为它返回一个也响应each(或map)的数组,但我想有可能存在区别重要的情况。