Во-первых, хеш является отличной отправной точкой для такого рода данных.Вместо:
LANGPROFICIENCY = [
["Elementary proficiency", 1],
["Limited working proficiency", 2],
["Professional working proficiency", 3],
["Full professional proficiency", 4],
["Native or bilingual proficiency", 5]
]
используйте:
LANGPROFICIENCY = {
"Elementary proficiency" => 1,
"Limited working proficiency" => 2,
"Professional working proficiency" => 3,
"Full professional proficiency" => 4,
"Native or bilingual proficiency" => 5
}
Вы можете захватить keys
или values
отдельно, если хотите, что удобно, когда они нужны вам по отдельности, или выможно найти ключ, чтобы найти значение, как всегда.
Оттуда вы можете изменить хеш:
Hash[*LANGPROFICIENCY.to_a.map{ |a| a.reverse }.flatten]
, который вернет:
{
1 => "Elementary proficiency",
2 => "Limited working proficiency",
3 => "Professional working proficiency",
4 => "Full professional proficiency",
5 => "Native or bilingual proficiency"
}
упрощая поиск в обратном порядке.
Делая все это на один шаг дальше, если вы знаете, что столкновений не будет, чего быть не должно:
LANGPROFICIENCY = LANGPROFICIENCY.merge( Hash[ *LANGPROFICIENCY.to_a.map{ |a| a.reverse }.flatten ] )
, что приводит к:
{
"Elementary proficiency" => 1,
"Limited working proficiency" => 2,
"Professional working proficiency" => 3,
"Full professional proficiency" => 4,
"Native or bilingual proficiency" => 5,
1 => "Elementary proficiency",
2 => "Limited working proficiency",
3 => "Professional working proficiency",
4 => "Full professional proficiency",
5 => "Native or bilingual proficiency"
}
Вы можете посмотреть вверх, вперед или назад.Это портит вашу способность захватывать только ключи или значения, но вы можете найти способ обойти это на одном из промежуточных этапов.
Я использую этот трюк все время, или варианты этой темы,Это позволяет очень легко отображать туда и обратно, используя одну переменную.
Теперь, если вы пробовали каждый шаг в IRB или в Ruby, вы получите несколько предупреждений о «warning: already initialized constant LANGPROFICIENCY
».Ответ заключается в том, чтобы использовать переменную вместо константы.Кроме того, LANGPROFICIENCY вряд ли является читаемым именем переменной.Я бы порекомендовал использовать lang_proficiency
или что-то подобное.