作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我仍然是一个 ruby 新手,我正在尝试学习如何使用 inject
方法。
通过使用 inject
方法,我试图返回一组字母及其在给定字符串中的外观,如下所示:
def sorting(str)
str.split("").uniq.map { |letter|
[letter, str.split("").inject(0) { |sum, char| sum + 1 if letter == char }]
}
end
p sorting("aaabdbbcccaaabcacba")
期望的结果应该是:
[["a", 8], ["b", 5], ["d", 1], ["c", 5]]
不幸的是,我收到一个错误:undefined method '+' for nil:NilClass
。
我做错了什么,我该如何使用 inject
及其优点来解决它?
最佳答案
使用 Enumerable#group_by
似乎更合适:
>> "aaabdbbcccaaabcacba".chars.group_by { |x| x }.map { |key, a| [key, a.size] }
=> [["a", 8], ["b", 5], ["d", 1], ["c", 5]]
传递给注入(inject)的 block 不关心不匹配的字符。
将 sum + 1 if letter == char
替换为 letter == char ?总和 + 1 :总和
:
def sorting(str)
str.split("").uniq.map { |letter|
[letter, str.split("").inject(0) { |sum, char| letter == char ? sum + 1 : sum }]
}
end
关于ruby-on-rails - 如何在Ruby中正确使用inject方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19609958/
我是一名优秀的程序员,十分优秀!