2016-12-26 17 views
1

我有一个功能,我打电话数千次。它基于约25个变量的值区分约40个不同的情况。每个变量有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