如果您想拆分以空格分隔的单词列表,请使用
def words(text)
return text.split.map{|word| word.downcase}
end
与Python的列表理解类似:
words("get out of here")
返回["get", "out", "of", "here"]
。如何将块应用于字符串中的每个字符?
答案 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
)的数组,但我想有可能存在区别重要的情况。