任务是这样的:
他给了我几个字符串数据(确切地说是8个字符串数据)。我可以选择将它存储在数组或哈希中。
"hello", "you", "great", "you", "great", "hello", "great", "great"
现在我必须合并这些字符串中的相同数据。我的意思是,如果我把它们放在一个数组中。
myary = ["hello", "you", "great", "you", "great", "hello", "great", "great"]
我必须让它变得像这样
myary = ["hello x2", "you x2', great x4"] # I need to append "x" and a variable indicating the total sum of every same string in the array.
如果我愿意,我可以使用哈希,但问题是,我找不到一个好方法来做到这一点。我挣扎了几个小时,这是徒劳的。我能做的最好的就是:
我将它们存储在哈希值中。
myhash = {
1 => "hello",
2 => "you",
3 => "great",
4 => "you",
5 => "great",
6 => "hello",
7 => "great",
8 => "great",
}
然后我写下这段代码:
myarray = []
@variable = 0
for i in 1..myhash.length
for j in 1..myhash.length
@variable += 1 if myhash[i] == myhash[j]
end
myarray[i] = myhash[i] << " x#{@variable}"
@variable = 0
end
puts myarray
这将给出输出:
hello x2 # This nice "hello" is 2
you x2 # This good "you" indeed is 2
great x4 # This perfect "great" is 4 <= Everything great 'till here. But...
you x1 # Why?
great x3 # What the..?
hello x1 # Oh c'mon..
great x2 # Okay, I'm screwed
great x1 # Stackoverflow help me!!
你可以看到我搞砸了,我知道代码是错的,但是相信我,我几乎把头撞到了墙上,因为这件事。有人请,我需要认真帮助。 哦,我想确定一些事情,这项任务是否有可能完成?我只是想确保我的大四学生不会取笑我的任务。但实际上我想知道这是否真的有可能。 对不起,如果我做错了什么。非常感谢你。请不要燃烧:)毕竟我只是问,如果你觉得不喜欢给答案,那么就干脆离开。积极的回答非常感谢。
答案 0 :(得分:4)
你几乎不需要ruby中的低级for
循环。
myary = ["hello", "you", "great", "you", "great", "hello", "great", "great"]
myary.group_by{|el| el }.map {|key, items| "#{key} x#{items.length}"} # => ["hello x2", "you x2", "great x4"]
答案 1 :(得分:1)
您也可以使用哈希,其中键是单词,值是您看过它的次数。第一次看到单词时,将其添加到计数为1的哈希值中。如果再次看到它,请更改该单词的哈希值中存储的值。
完成后,查看哈希中的计数。
(我不再说了,因为这看起来像是一个家庭作业问题。如果你被卡住了,请你的老师解释一下。)