2014-07-17 66 views
0

今天我從我的老人有一個非常困難的任務(也許只是對我來說很難)。紅寶石相同的元素數組或值在散列,團結它,

的任務是這樣的:

  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. 
    

    ,如果我想我可以使用哈希值,但問題是,我無法找到一個好辦法做到這一點。我奮鬥了幾個小時,這是徒勞的。我能做的最好的是這裏:

我將它們存儲在一個散列。

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

正如你可以看到我搞砸了,我知道的代碼是錯誤的,但相信我,因爲這件事,我差點把我的頭撞到牆上。有人請,我需要認真的幫助。 哦,我想確定一些事情,這項任務是否有可能完成?我只是想確保我的大四不是在挑剔我的任務。但事實上,我想知道這是否真的有可能。 對不起,如果我做錯了什麼。非常感謝你。請不要燃燒:)畢竟我只是問,如果你覺得不喜歡回答或其他問題,那就乾脆離開。肯定的答覆非常感謝。

回答

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

+0

Woaah,這真是太好了,我從來沒有知道GROUP_BY方法。非常感謝。 :) – LuminaChen

1

你也可以使用散列,其中關鍵是單詞,值是你看過它的次數。第一次看到一個單詞時,將其添加到計數爲1的散列中。如果再次看到它,請更改存儲在該單詞的散列中的值。

完成後,查找散列中的計數。

(我不是說任何更多,因爲這看起來像一個家庭作業的問題。問問你的老師解釋這一點,如果你就完蛋了。)

+0

由於幾天過去了,也許另一個微調是合理的。將你的單詞數組轉換爲一個散列數組,每個散列單元具有一個鍵(數組中的一個單詞)和一個值爲1的值。現在,反過來,使用[Hash.merge]的形式(http://www.ruby-doc.org/core-2.1.1/Hash)將這些散列合併爲最初爲空的散列。html#method-i-merge)需要一個塊。 –