红宝石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