Ruby - Hash.Select с переменной - PullRequest
0 голосов
/ 06 мая 2018

пытается передать правило переменной в перечислителе выбора

match = companies.select{ |x| x[rule] > 10  }

data.each do |item|
   item.each do |file_name,filter_settings|
     if file_name == "out1_1x.csv"
       output_file = file_name
       current_filter = filter_settings
       rule = filter_settings[:rule].to_sym
       condition = filter_settings[:condition]
       amount = filter_settings[:amount]
       p rule   # here i have :price
          match = companies.select{ |x| x[rule] > 10  }
         puts match
      end
    end
end

но получаю ошибку:

неопределенный метод '>'

для нулевого класса, даже если в правиле присваивается значение.

companies.select{ |x| x[:price] > 10  }

Это назначение в порядке.

Компании определяются как массив хэшей со структурой:

{:name=>"ABC company", :code=>"RDCX", :price=>33,:volume=>79560}
{:name=>"DEF", :code=>"FFF", :price=>41, :volume=>367491}

Я также хотел бы спросить, есть ли какая-либо опция, как передать в перечислитель выбора «полный набор параметров» из «внешних переменных - правило, условие, количество»?

что-то вроде

match = companies.select{ |x| x[rule] condition amount  }
Where condition is - ">", "<" "=" ?

Большое спасибо.

1 Ответ

0 голосов
/ 06 мая 2018

Посмотрите на метод send:

companies =[{:name=>"ABC company", :code=>"RDCX", :price=>33,:volume=>79560},
   {:name=>"DEF", :code=>"FFF", :price=>41, :volume=>367491}]
rule = :price
condition = :>
amount = 35

p companies.select{|h| h[rule].send(condition, amount)}

# => [{:name=>"DEF", :code=>"FFF", :price=>41, :volume=>367491}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...