紅寶石noob在這裏....如何將數組轉換爲紅寶石鍵值對哈希
我一直在哈希星陣列太久。
我需要轉換這樣一個數組...
myArray = ["X", "X", "O", "O", "O", "+", "+", "O", "X"]
成......像這樣的哈希...
myHash = {"X"=>0, "X"=>1, "O"=>2, "O"=>3, "O"=>4, "+"=>5, "+"=>6, "O"=>7, "X"=>8}
我怎樣才能做到這一點?
感謝您的時間。
紅寶石noob在這裏....如何將數組轉換爲紅寶石鍵值對哈希
我一直在哈希星陣列太久。
我需要轉換這樣一個數組...
myArray = ["X", "X", "O", "O", "O", "+", "+", "O", "X"]
成......像這樣的哈希...
myHash = {"X"=>0, "X"=>1, "O"=>2, "O"=>3, "O"=>4, "+"=>5, "+"=>6, "O"=>7, "X"=>8}
我怎樣才能做到這一點?
感謝您的時間。
其實這可以來完成:
myArray = ["X", "X", "O", "O", "O", "+", "+", "O", "X"]
h = {}.compare_by_identity
myArray.each_with_index{|k,v| h[k] = v}
p h
#=>{"X"=>0, "X"=>1, "O"=>2, "O"=>3, "O"=>4, "+"=>5, "+"=>6, "O"=>7, "X"=>8}
+1。讓我們聽到它尊重OP的問題,並知道是否知道。 :-) – 2013-07-18 16:14:24
我假設你想要一個數組,而不是一個哈希
["X", "X", "O", "O", "O", "+", "+", "O", "X"].each_with_index.map do |obj, i|
[obj,i]
end
=> [["X", 0], ["X", 1], ["O", 2], ["O", 3], ["O", 4], ["+", 5], ["+", 6], ["O", 7], ["X", 8]]
harbichidian作出關於相同的密鑰好點。爲了讓哈希從格式指定數組:
myArray = ["X", "X", "O", "O", "O", "+", "+", "O", "X"]
myHash = {}
(0...myArray.length).each do |i|
myHash[myArray[i]] = i
end
不過,既然你有重複鍵,這將導致:
{"X"=>8, "O"=>7, "+"=>6}
貌似要與位置莫名其妙處理陣列中的每個元素的
可以用以下方式實現:
myHash = Hash.new
myArray.each_with_index do |x,i|
myHash[i] = x
end
myHash: => {0=>"X", 1=>"X", 2=>"O", 3=>"O", 4=>"O", 5=>"+", 6=>"+", 7=>"O", 8=>"X"}
這也是如此。 – Jessi 2013-03-02 02:29:42
我相信你沒有完全掌握Hashes,或者你只是想銷燬任何重複的值。
散列不能有重複鍵,所以「X」不能occure兩次意思是:你的哈希將錯過所有的重複鍵的轉換:
['X','X','Y'] -> {"X"=> 0, "Y"=>1} or {"X"=> 0, "Y"=>2}
這就引出了另一個問題:你要使用索引或從零開始遞增整數?
隨着指數摧毀任何重複:
h = Hash.new
arr.each_with_index {|x,i| if not h.has_key?(x) then h[x] = i;h}
隨着增量也摧毀任何重複:
h = Hash.new
count = 0
arr.each{|x|
if not h.has_key?(x) then
h[x] = count
count+=1
}
這一切都有道理,但它確實取決於你想解決的問題。正如其他人所建議的,你也可以將整數作爲你的關鍵。
一種指數的解決方案:
h = Hash.new
arr.each_with_index{|x,i|
h[i] = x
}
希望任何解決方案可能會奏效,但對未來的嘗試告訴更多一點關於你想解決的問題。
你從哪裏得到8? – Linuxios 2013-02-28 14:36:12
您不能擁有多個相同密鑰的散列。 'myHash [「X」]'會返回什麼? – harbichidian 2013-02-28 14:39:49
這是毫無意義的(並且偶然不可能,由於重複的鍵)。您將每個鍵的值設置爲其在數組中的索引;你*已經擁有這個*。這是你找到價值的地址。你所要做的只是顛倒它,出於什麼原因? – meagar 2013-02-28 14:43:29