Mám pole:
arr = [a, ab, abc]
Chcem urobiť hash s použitím hodnôt poľa ako kľúčov:
newhash = [a[1], ab[1], abc[1]]
Skúsil som:
arr.each do |r|
newhash[r] == 1
end
bezvýsledne.
Ako by som to dosiahol v Ruby?
odpovede:
0 pre odpoveď č. 1== je porovnanie. = je priradenie. Takže stačí zmeniť == na =. Funguje to.
newhash = {}
arr.each do |r|
newhash[r] = 1
end
(Verím, že a, ab, abc sú reťazce)
Ak sa chcete dozvedieť viac, môže vám to pomôcť. Pole na Hash Ruby
0 pre odpoveď č. 2
Môžete to urobiť takto:
ary = [[:foo, 1], [:bar, 2]]
Hash[ary] # => {:foo=>1, :bar=>2}
Ak to chcete urobiť tak, ako ste to vyskúšali predtým, chcete inicializovať hash správne:
ary = [:foo, :bar]
hash = {}
ary.each do |key|
hash[key] = 1
end # => {:foo=>1, :bar=>2}
0 pre odpoveď č. 3
Ak sa cítite ako obšívka, bude to tiež fungovať
h = Hash[arr.collect { |v| [v, 1] } ]
collect
sa vyvolá raz na prvok v poli, takže vracia pole dvojprvkových polí párov kľúč - hodnota.
Potom sa privádza do hashového konštruktora, ktorý premení rad párov na hash
0 pre odpoveď č. 4
Môžete tiež použiť #reduce
metóda od Enumerable
(ktorá je zahrnutá v Array
trieda).
new_hash = arr.reduce({}) { |hsh, elem| hsh[elem] = 1; hsh }
A tvoj new_hash
vyzerá takto v Ruby:
{"a": 1, "ab": 1, "abc": 1}