/ / Ako vytvorím hash, kde kľúče sú hodnoty z poľa Ruby - rubín, polia, hash, kľúč

Ako vytvorím hash, kde sú kľúče hodnoty z poľa Ruby - ruby, polia, hash, kľúč

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}