Ruby - 将多个数组转换为哈希表

3
我想将三个不同的数组转换为一个哈希表。
这是这三个数组:
@vehicle_numbers = ["Registration Number 1", "Registration Number 2", "Registration Number 1"]
@vehicle_colors = ["red", "blue", "green"]
@allocated = [true, true, true]

我想要实现的是:
{1=> ["Registration Number 1", "red", true], 2=> ["Registration Number 2", "blue", true]}

到目前为止,我已经实现了这个。
{1=> ["Registration Number 1", "red"], 2=>["Registration Number 2", "red"]}

我正在尝试将已分配的键添加到现有哈希中,但我无法弄清楚问题出在哪里。

@lines.each do |line|
      @method_name = line.split[0]
      if @method_name == "park"
        @vehicle_numbers << @vehicle_number = line.split[1]
        @vehicle_colors << @vehicle_color = line.split[2]
        @vehicle_info["#{@vehicle_number}"] = @vehicle_color
        # puts @vehicle_info["#{@vehicle_number}"] = @vehicle_color
      end
    end
    @slots = 1.step(@vehicle_numbers.count, 1).to_a
    @vehicle_info = Hash[(@slots).zip @vehicle_info ]
    @slots.each do |slot|
      puts "Allocated slot number: #{slot}"
    end
    puts @vehicle_info

3
到目前为止,我已经实现了这个。如果您发布用于实现它的代码,通常会有助于揭示您所面临的确切问题。 - Amadan
你可能想要查看inject、map和with_index。 - Kris
@Amadan 是的。我当时正在中转,所以无法粘贴代码。我已经更新了我的尝试,但很混乱。 - Kedarnag Mukanahallipatna
5个回答

5
你可以用一行代码实现。
@vehicle_numbers.zip(@vehicle_colors, @allocated).each.with_index(1).to_h.invert
# => {1=>["Registration Number 1", "red", true], 2=>["Registration Number 2", "blue", true], 3=>["Registration Number 1", "green", true]}

4
[@vehicle_numbers, @vehicle_colors, @allocated].transpose.map.with_index { |a, i| [i + 1, a] }.to_h

5
with_index 可接受参数:with_index(1) { |a, i| [i, a] }.to_h。该代码将返回一个哈希表,其中键为元素的索引加一,值为元素本身。 - Aleksei Matiushkin

2

那么仅仅通过索引在 @vehicle_numbers 上进行迭代,并通过该索引获取其他值呢?

@vehicle_numbers.map.with_index do |vehicle_number, index|
  [index + 1, [vehicle_number,  @vehicle_colors[index], @allocated[index]]]
end.to_h

1

只是出于好奇:

(1..3).zip(
  [@vehicle_numbers, @vehicle_colors, @allocated].transpose
).to_h 

0
你可以试试这个。对我来说很有效。
hash = (1..3).zip([@vehicle_numbers.map(&:to_s), @vehicle_colors.map(&:to_s), @allocated].transpose).to_h

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接