如果您想分割一个空格分隔的单词列表,您可以使用
def words(text)
return text.split.map{|word| word.downcase}
end
类似于Python的列表推导式:
words("get out of here")
返回["get", "out", "of", "here"]
。如何将块应用于字符串中的每个字符?
使用String#chars
:
irb> "asdf".chars.map { |ch| ch.upcase }
=> ["A", "S", "D", "F"]
你在找这样的东西吗?
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"
我认为对你的问题的简短回答是"不,没有像map
这样的字符串一次操作一个字符。"在我的书中,前面的答案是最干净的解决方案;只需在类中添加一个函数定义就可以创建一个。
BTW,还有String#each_char
,这是一个遍历字符串的每个字符的迭代器。在这种情况下,String#chars
得到你同样的结果,因为它返回一个数组,也响应each
(或map
),但我想可能有情况下,区别将是重要的。