用于在Java中存储和检索一个动作和多个动词之间的映射的数据结构

时间:2018-05-16 05:34:33

标签: java data-structures

我必须使用什么类型的数据结构来构建字典,例如将一种类型的动作映射到多个动词的结构?

  

示例:Action1将映射到verb1,verb2,verb5和Action2   将被映射到verb3,verb4。

每个动作都可以附加不同数量的动词。动作和动词之间的联系将是硬编码的。

另外,我需要在动词列表中搜索用户输入的动词,并在相应的动作名称中显示:

  

示例:如果用户输入是动词4,则系统必须返回Action2

5 个答案:

答案 0 :(得分:0)

你可以使用HashMap,关键是动作,值将是动词列表:

data_list = [data0, data1, data2]
final_data = pd.concat(data_list).sum(level=[0,1]).reset_index()
print (final_data)
    player_id  player_name  ab  run  hit
0       28920     S. Smith   2   13    8
1       33351   T. Mancini   0    0    2
2       30267    C. Gentry   0    0    0
3       28513     A. Jones   2    1    0
4       31097   M. Machado   4   11    3
5       29170     C. Davis   9    6    4
6       29322    M. Trumbo   3    5    7
7       29564  W. Castillo   0    0    0
8       34885       H. Kim   1    1    2
9       32952   J. Rickard   1    5    4
10      31988    J. Schoop   5    3    4
11       5908   J.J. Hardy   4    2   15

答案 1 :(得分:0)

这听起来像动作和动词集

Map<String, Set<String>> dictionary = new HashMap<>();

使用set来存储动词可确保在您想要通过给定动词查找动作时的唯一性并提供良好的性能

Set<String> action1Verb = new HashSet<>();
action1Verb.add("verb1");
action1Verb.add("verb2");
....
dictionary.put(action1, action1Verb);
dictionary.put(action2, action2Verb);

通过动词搜索动作:

String action = dictionary.keySet().stream()
          .filter(key -> dictionary.get(key).contains("verb"))
          .findFirst()
          .orElse(null);

如果您不太关心内存使用情况,建议您使用两张地图进行存储:

Map<String, Set<String>> dictionary to store action -> set of verbs
Map<String, String> verbMap to store verb -> action

在这种情况下,动词的搜索动作非常快,如:

String action = verbMap.get("verb")

答案 2 :(得分:0)

我认为HashMap<String, Action>会合适。

由于你想使用动词来访问动作但反之亦然,动词应该是键。

以下是一些示例映射:

verb1 -> Action1
verb2 -> Action1
verb5 -> Action1
verb3 -> Action2
verb4 -> Action2

这样,您可以确保没有动词引用两个动作,因为键是唯一的。

答案 3 :(得分:0)

数据结构取决于动词和动作之间的关系。你在动词和动作之间有什么关系? 1-N N-N或N-1?

答案 4 :(得分:0)

如果您需要精确的词典,例如数据结构,请转到 前缀树 Trie 。如果 n 键数, m 是键的长度,则Trie的时间复杂度为 O(m)

如果你的动词中有一些词典顺序或类似的前缀,那么Trie是首选。

                     t
                   /   \
                te     ta
               /  \      \
             tea  ten    tar

Leetcode: Prefix Tree

Wikipedia: Trie

如果情况并非如此,则 HashMap 是合适的选项,如其他答案中所述。