2013-08-29 42 views
0

爲了準備挑戰,我試圖解決一堆關於ruby的'簡單'問題。但是,他們對我來說不是很容易:P。未定義的方法`nearest_larger'爲主:對象

問題國家 - >

# Write a function, `nearest_larger(arr, i)` which takes an array and an 
# index. The function should return another index, `j`: this should 
# satisfy: 
# 
# (a) `arr[i] < arr[j]`, AND 
# (b) there is no `j2` closer to `i` than `j` where `arr[i] < arr[j]`. 
# 

我不想看答案一年,所以已經倒什麼,我知道這麼遠成寫下面的代碼 -

def nearest_larger(arr, i) 
    j = 0 
    k = i+1 
    larger_hash = {} 

    while j < i 
     larger_hash[arr[j]] = j if arr[i] < arr[j] 
     j +=1 
    end 

    while k < (arr.count - 1) do 
     larger_hash[arr[k]] = k if arr[i] < arr[k] 
     k+=1 
    end 

    max_value = larger_hash.keys.max 


end 

nearest_larger([3, 5, 6, 14, 20, 18], 2) 

我很肯定會有一些美麗而簡單的方法來回答這個問題,但是,唉,我不知道爲什麼我的解決方案正在吐出一個NoMethodError。

任何幫助,不勝感激

+1

我沒有得到一個'NoMethodError',而是一些其他的錯誤。例如,在像這個'large_hash {arr [j]}'這樣的散列中尋址值是不正確的。你必須使用方括號。然後你有「無法比較零與fixnum錯誤」 –

+0

呃,固定,現在我在你所在的位置,無法與fixnum比較零。感謝您的幫助Sergio –

+0

您還應該將循環更改爲'for for(in((i + 1)..(arr.count-1))do' – Santhosh

回答

0

我認爲你的主要問題是在你的方法有語法錯誤,導致它不能被定義,所以當你嘗試調用它後,它沒有找到。

語法錯誤的原因是使用大括號{}而不是括號[]來訪問散列內的鍵。

不要被perl在這方面混淆。

訪問的散列值是不同

in perl: some_hash{a_key} 
in ruby: some_hash[a_key] 

這可能看起來很奇怪,因爲都使用括號散列文字:

分配一個空散列文字是相同的

in perl: some_hash = {} 
in ruby: some_hash = {} 
+0

嗨Fd,謝謝你,修正:)。我認爲我犯了另一個錯誤,實際上我最後調用了最大的關鍵值,但是我想調用最接近我的關鍵值。你知道我會怎麼寫嗎? –

+0

你可以把鑰匙改成與我的絕對距離,然後得到最小的一個。相關價值將成爲最接近的候選人之一的指數。 –

+0

然而,通過將所有更大的值存儲在散列中,您正在做的工作量超過必要量。你可以從我的迭代中找到第一個較大的值然後停止。你可以這樣做,只需在每個while循環中添加一個額外的條件,並結合鍵入與我的絕對距離(或者,你可以忽略散列,但是你可能需要更多冗長的代碼來決定返回的內容) –

0

您的問題已在上面解答。您可能希望考慮編寫您的方法的其他方法,以更好地利用Ruby的表現力,例如我在下面提出的建議。由於這不能回答你的問題,因此我考慮將它移到上面的註釋中,但註釋並非僅用於一行代碼,而且多行代碼無法在註釋中正確格式化。

def nearest_larger(arr, i) 
    # maybe check for i.abs >= arr.size 
    a = arr.each_with_index.sort.map {|v , idx| v} 
    j = a.index(arr[i]) 
    return arr.index(a[j+1]) if j+1 < arr.size 
    nil  
end 
+1

這不提供問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 –

+0

@PaulGriffiths:謝謝你的建議。在閱讀您的評論之後,我嘗試將我的答案轉換爲評論,正如您所建議的那樣,但遇到了代碼格式問題。我編輯了我的答案,以解釋我的答案的原因。 –

相關問題