Ruby获取用户输入,添加到数组。验证用户输入是否与对象数组匹配

时间:2016-06-05 09:55:42

标签: ruby object hash include

我有一个小方法,将在初始化的'Order'类对象上调用,以获取用户输入,询问他们想要从菜单添加到他们的订单中的项目。方法是:

public $postLink(scope: ng.IScope , element: ng.IAugmentedJQuery, attrs: ng.IAttributes):void {

}

我将菜单存储在数组中,作为对象的“哈希”,之前通过从名为“Dish”的类初始化新对象而创建。这些被添加到名为@menu的实例变量中,即:

def add_to_order
    @order = []
    while true
      puts "Item:"
      @item = gets.chomp
      break if @item.empty?
      puts "Qty?"
      @qty = gets.chomp
      @order << [@item, @qty]
    end
  end

我的问题是 - 当获得用户输入时,我如何检查他们输入的项目是否在@menu中包含的列表中,当此@menu不是正常数组时,但是如果更多''对象信息数组?我尝试了以下但是没有用。

 @menu=
  [[#<Dish:0x007fa1f8953b10 @dish={:name=>"Chicken Stew", :price=>4.5}>,
    #<Dish:0x007fa1f883daf0 @dish={:name=>"Beef & Ale Pie", :price=>5.0}>,
    #<Dish:0x007fa1f89d86f8 @dish={:name=>"Chicken & Leek Pie", :price=>4.0}>,
    #<Dish:0x007fa1f8b5b048 @dish={:name=>"Vegetable Pie", :price=>3.5}>,
    #<Dish:0x007fa1f8d03378 @dish={:name=>"Fish Pie", :price=>5.5}>,
    #<Dish:0x007fa1f8df1c08 @dish={:name=>"Chips", :price=>2.0}>,
    #<Dish:0x007fa1f9993a70 @dish={:name=>"Mushy Peas", :price=>1.5}>]]

1 个答案:

答案 0 :(得分:0)

您可以使用find(或其别名detect)来阻止:

@menu[0].find { |dish| dish.name == @item }

如果没有匹配的菜,这将返回菜单中的第一道菜,其名称与@itemnil匹配。

提示:您可能需要考虑将菜单存储在哈希而不是数组中,因为哈希会允许更快的查找。