Ruby中相同的元素数组或值,将它联合起来,

时间:2014-07-17 11:04:16

标签: ruby arrays hash

今天我从我的大四学生那里遇到了一项非常艰巨的任务(也许只对我来说很困难)。

任务是这样的:

  1. 他给了我几个字符串数据(确切地说是8个字符串数据)。我可以选择将它存储在数组或哈希中。

    "hello", "you", "great", "you", "great", "hello", "great", "great"
    
  2. 现在我必须合并这些字符串中的相同数据。我的意思是,如果我把它们放在一个数组中。

    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.
    

    如果我愿意,我可以使用哈希,但问题是,我找不到一个好方法来做到这一点。我挣扎了几个小时,这是徒劳的。我能做的最好的就是:

  3. 我将它们存储在哈希值中。

    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!!
    

    你可以看到我搞砸了,我知道代码是错的,但是相信我,我几乎把头撞到了墙上,因为这件事。有人请,我需要认真帮助。 哦,我想确定一些事情,这项任务是否有可能完成?我只是想确保我的大四学生不会取笑我的任务。但实际上我想知道这是否真的有可能。 对不起,如果我做错了什么。非常感谢你。请不要燃烧:)毕竟我只是问,如果你觉得不喜欢给答案,那么就干脆离开。积极的回答非常感谢。

2 个答案:

答案 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"]

文档:Enumerable#group_byEnumerable#map

答案 1 :(得分:1)

您也可以使用哈希,其中键是单词,值是您看过它的次数。第一次看到单词时,将其添加到计数为1的哈希值中。如果再次看到它,请更改该单词的哈希值中存储的值。

完成后,查看哈希中的计数。

(我不再说了,因为这看起来像是一个家庭作业问题。如果你被卡住了,请你的老师解释一下。)