Ruby 内の各配列に通貨値を割り当てるにはどうすればよいですか?

概要

私は、必要なコンピュータの数を尋ねる Ruby プログラムを作成しています。このプログラムには、コンピュータ、モニタ、および無料アイテムの配列があります。各配列にコストを追加したいと考えています。配列内の各項目に値を追加できれば素晴らしいですが、初心者の私には複雑すぎて理解できないかもしれません。

私がこれまでに持っているもの:

def computer_order()
    puts "how many computers with monitors would you like today?"
    number = gets.chomp
    number = number.to_i
    number
end

def monitor_and_computer()
    computer_type = ["Dell Inspiron", "HP Pro", "Acer Vero", "Lenovo Ideacentre", "Dell Optiplex", "HP Envy"]
    monitor_type = ["Dell 27' Curved", "Viewsonic 22' Flat", "LG 24' Flat", "Samsung 27' Curved", "Spectre 27' Flat", "MSI 31.5' Curved"]
    free_item = ["250G Thumb drive", "Declan's Shop T-Shirt", "25$ Steam Gift Card"]
    cost = 600

    number_of_computers = computer_order()
    number_of_computers = number_of_computers.to_i
    total = (number_of_computers * cost)
    total = total.to_s

    number_of_computers.times do 
        puts "One computer is  " +  computer_type.sample + ", " + monitor_type.sample + ", " + free_item.sample
    end 
       puts "Your total is: $" + total
end
    
    monitor_and_computer()

解決策

まずはこれを試してみると良いと思います。ハッシュを使用して、まず商品の価格と名前の情報をグループ化し、必要なデータを抽出します。

def computer_order
  puts "how many computers with monitors would you like today?"
  number = gets.chomp
  number = number.to_i
  number
end

def monitor_and_computer
  computer_types = [
    {
      name: "Dell Inspiron", 
      price: 100
    },
    {
      name: "HP Pro", 
      price: 200
    },
    {
      name: "Acer Vero", 
      price: 300
    },
    {
      name: "Lenovo Ideacentre", 
      price: 400
    },
    {
      name: "Dell Optiplex", 
      price: 500
    },
    {
      name: "HP Envy",
      price: 600
    }
  ]
  monitor_types = [
    {
      name: "Dell 27' Curved", 
      price: 200
    },
    {
      name: "Viewsonic 22' Flat", 
      price: 300
    },
    {
      name: "LG 24' Flat", 
      price: 400
    },
    {
      name: "Samsung 27' Curved", 
      price: 500
    },
    {
      name: "Spectre 27' Flat", 
      price: 600
    },
    {
      name: "MSI 31.5' Curved",
      price: 700
    }
  ]
  free_items = ["250G Thumb drive", "Declan's Shop T-Shirt", "25$ Steam Gift Card"]

  total = 0
  number_of_computers = computer_order
  number_of_computers.times do
    computer = computer_types.sample
    monitor = monitor_types.sample
    free_item = free_items.sample

    total += computer[:price] + monitor[:price]
    puts "One computer is #{computer[:name]}, #{monitor[:name]}, #{free_item}"
  end
  puts "Your total is: $#{total}"
end
    
monitor_and_computer

これを実装すると、ユーザーはコンピューターの数ではなく、必要なモデル名を入力できるようになります。 find を使用すると、製品の配列内で必要な要素を見つけることができます。たとえば、次のようになります。

computer_types.find { |c| c[:name] == 'HP Pro' }
# => {:name=>"HP Pro", :price=>200}