gpt4 book ai didi

ruby-on-rails - 如何在Ruby中正确使用inject方法

转载 作者:数据小太阳 更新时间:2023-10-29 07:46:30 26 4
gpt4 key购买 nike

我仍然是一个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com