我有3个数据集,比如A、B和C。A包含5个元素的单个数组。B包含一个2D数组,C也包含一个2D数组。A包含5个独立于B和C的元素。对于A中的每个元素,在B中关联一个数组,而对于B的数组中的每个元素,在C中关联一个数组。所以我想把这些数据集存储在一个数据结构中,这样在A中选择一个元素应该在B中给出适当的元素数组,而在B的数组中选择一个元素应该给出一个C的元素。有没有人能给我推荐一个..我用java编程语言来实现这个数据结构..
发布于 2012-09-30 03:22:26
如果我没理解错的话,您正在寻找从A的元素到B的元素,以及从这些元素到C的映射。要实现这一点,最简单的方法是使用一些HashMaps,或者实现Map接口的任何其他类,例如:
List<TypeA> a = new ArrayList<TypeA>();
Map<TypeA, List<TypeB>> b = new HashMap<TypeA, List<TypeB>>();
Map<TypeB, List<TypeC>> c = new HashMap<TypeB, List<TypeC>>();这样,a就是您的数组A。b将元素从a映射到列表,列表是2D数组B中的行。类似地,c将这些行中的元素映射到列表,即C中的行。
或者,您可以对所有三个都使用一个嵌套的Map:
Map<TypeA, Map<TypeB, List<TypeC>>> abc =
new HashMap<TypeA, Map<TypeB, List<TypeC>>>;这样,abc中的键对应于数组A。每个键的值也是一个映射,它的键是B中与A中的元素相对应的行的元素。最后,每个键的值都是C中与B中的元素相对应的行。
注意,Map中的键是没有排序的,所以如果顺序很重要(例如,如果您必须以任何特定的顺序迭代A,或者如果您必须通过某些索引访问它们),您应该使用第一种解决方案。如果顺序对于b和c也很重要,您可以尝试这样做:
List<TypeA> a = new ArrayList<TypeA>();
List<List<TypeB>> b = new ArrayList<List<TypeB>>();
List<List<TypeC>> c = new ArrayList<List<TypeC>>();
Map<TypeA, Integer> ab = new HashMap<TypeA, Integer>();
Map<TypeB, Integer> bc = new HashMap<TypeB, Integer>();在这里,a、b和c直接对应于你的A、B和C(如果你知道它们有多少元素,你也可以使用数组)。然后,ab和bc保存从a (或b)的每个元素到b (或c)中相应索引的映射。请注意,无论何时将元素插入到a或b中,都必须更新ab和bc。
因此,如果顺序不重要,我会推荐第二种解决方案,因为这样你就不必‘同步’a、b和c。
发布于 2012-09-28 15:34:58
// <Value, index in A>
vector<pair<Value, int>> A;
// <Value, index in C>
vector<vector<pair<Value, int>> B;
// Values in C
vector<vector<Value>> C;如果我对你的问题的理解是正确的,在C++中人们会做上面的事情,对Java不是很确定。
https://stackoverflow.com/questions/12634986
复制相似问题