【发布时间】:2014-12-03 14:58:47
【问题描述】:
我想制作一个程序,在该程序中,我可以对作为字谜的字符进行排序并将其存储到各个组中。例如字符串:
“四款疤痕膏的尖叫车”答案应该是:
[["scream", "creams"], ["cars", "scar"], ["for"], ["four"]]
上面我使用了代码:
here = self.split()
there = here.group_by { |x| x.downcase.chars.sort}.values
我得到了所需的答案。但是当我将代码更改为:
here = self.split()
there = here.group_by { |x| x.downcase.chars.sort}
我得到了答案:
{["a", "c", "e", "m", "r", "s"]=>["scream", "creams"], ["a", "c", "r", "s"]=>["cars", "scar"], ["f", "o", "r"]=>["for"], ["f", "o", "r", "u"]=>["four"]}
我想知道为什么现在会这样?我是通过hit-and-trial方法得到答案的。
【问题讨论】:
-
你正在使用返回哈希的 group_by 你可以在这里看到ruby-doc.org/core-2.1.5/Enumerable.html#method-i-group_by。
-
@Kranthi 我想知道为什么删除“值”会将答案从所需变为我最终得到的?
-
因为您使用#chars 根据字符对它们进行排序。
-
首先它对字母进行排序,然后反复检查哪个单词与之匹配,并根据它对单词进行分组。
-
@Rohit 因为
values是一种方法:返回一个新数组,其中填充了来自 hsh 的值。 ( www.ruby-doc.org/core-2.1.4/Hash.html#method-i-values )。当你删除它时,你会得到整个哈希,而不是值数组。