乘以電流值I具有該散列:哈希迭代,同時通過連續的值
myhash = { 1=> 2, 2=> 18, 3=> 8,
4=> 22, 5=> 34, 6=> 16 }
我將一個號碼傳遞給我的方法,來檢查,如果在散列任何兩個連續值相乘,將匹配數。
例如: Number是748,所以迭代應該是2 * 18,18 * 8,8 * 22,22 * 34,34 * 16。正確答案將是22和34的散列值。
一個我試圖讓這個方法工作
l = myhash.length - 1
product = 748
myhash.take(l).keep_if.each_with_index { |k,v| myhash[v] * myhash[v+1] == product }
令人驚訝的,這是引發undefined method
*」的零:NilClass`。我出人意料地說,因爲我在另一個地方使用了這種成功的乘法。
我正在考慮它,因爲[v + 1]可能是空的,我使用錯誤的語法。 我想完成什麼,但我已經嘗試了'select'和'keep_if',是讓哈希函數返回兩個鍵/值對。在這種情況下的示例 - [[4, 23][5, 34]
。
我嘗試過的另一件事是更有希望的是使用if語句,然後將兩個值捕獲到另一個數組。它的工作,但有點過分。有什麼建議麼?
請記住,哈希僅保留插入順序,否則它們根本沒有內在順序。改變哈希可以隨機地對訂單進行加擾。通常最好將序列存儲在排序對數組非常重要的地方。 – tadman
@tadman這就是爲什麼我使用'each_with_index',因爲我的理解是會保留哈希的順序。 – stuartambient
我在說的是,當你假設哈希按特定的順序時,如果沒有,你會感到驚訝。陣列不會以這種方式混淆自己。 – tadman