2016-12-26 2 views
1

У меня есть функция, которую я называю тысячи раз. Он различает около 40 различных случаев, основанных на значениях около 25 переменных. Каждая переменная имеет от 2 до 10 возможных значений. Поскольку для каждого значения не так много возможностей, и только 40 случаев, которые меня интересуют, я думал сделать каждый ответ целым числом от 0 до 9 и объединить эти целые числа, похожие на побитовые операторы. После объединения они могут использоваться в качестве ключей к словарю для извлечения типов, которые я ищу. Кто-нибудь знает о существующей реализации этого решения, о том, что он называется, или где я могу больше узнать об этом? Я пытаюсь решить это на C++ или Python. Мотивация здесь заключается в том, чтобы избежать тонких логических высказываний, скрывающих код. Кроме того, поскольку каждая переменная полностью независима, используя только команды if/else и/или switch, мне приходится проверять каждую переменную для каждого возможного значения несколько раз, поскольку не все различные типы группируются в категории, которые разделяют большую часть их логики. Таким образом, это решение может сделать код более удобным для чтения и более эффективным. Вот пример Python из рода, что я пытаюсь сделать:Группировка memoized решений в словаре

type_dict = {111: 'Type 1', 
      112: 'Type 2', 
      113: 'Type 3', 
      # ... 
      537: 'Type 32'} # etc. 


answers = [] 
for each_run in list_of_scenarios: 
    # Based on a bunch of logic, determine the value of each variable 
    var_a = 5 
    var_b = 3 
    var_c = 7 

    # Combine these variables to one key 
    this_key = 100*var_a + 10*var_b + var_c 

    answers.append(type_dict[this_key]) 

ответ

2

В Python, вы можете воспользоваться тем, что кортежи являются действительными ключи словаря:

type_dict = {(1, 1, 1): 'Type 1', 
      (1, 1, 2): 'Type 2', 
      (1, 1, 3): 'Type 3', 
      (5, 3, 7): 'Type 32'} 

var_a = 5 
var_b = 3 
var_c = 7 

type_dict[(var_a, var_b, var_c)] 

Возвращает:

'Type 32' 
+0

ответ на этот вопрос описывается, как реализовать подобное решение в C++: http://stackoverflow.com/questions/1842941/translating-python-dictionary-to-c – Alex

+0

ли эта работа для вас? –

+0

Да, это работает. – Alex

Смежные вопросы