首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要数据结构来存储3个数据集

需要数据结构来存储3个数据集
EN

Stack Overflow用户
提问于 2012-09-28 14:51:22
回答 2查看 807关注 0票数 1

我有3个数据集,比如A、B和C。A包含5个元素的单个数组。B包含一个2D数组,C也包含一个2D数组。A包含5个独立于B和C的元素。对于A中的每个元素,在B中关联一个数组,而对于B的数组中的每个元素,在C中关联一个数组。所以我想把这些数据集存储在一个数据结构中,这样在A中选择一个元素应该在B中给出适当的元素数组,而在B的数组中选择一个元素应该给出一个C的元素。有没有人能给我推荐一个..我用java编程语言来实现这个数据结构..

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-30 03:22:26

如果我没理解错的话,您正在寻找从A的元素到B的元素,以及从这些元素到C的映射。要实现这一点,最简单的方法是使用一些HashMaps,或者实现Map接口的任何其他类,例如:

代码语言:javascript
复制
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

代码语言:javascript
复制
Map<TypeA, Map<TypeB, List<TypeC>>> abc = 
        new HashMap<TypeA, Map<TypeB, List<TypeC>>>;

这样,abc中的键对应于数组A。每个键的值也是一个映射,它的键是B中与A中的元素相对应的行的元素。最后,每个键的值都是C中与B中的元素相对应的行。

注意,Map中的键是没有排序的,所以如果顺序很重要(例如,如果您必须以任何特定的顺序迭代A,或者如果您必须通过某些索引访问它们),您应该使用第一种解决方案。如果顺序对于bc也很重要,您可以尝试这样做:

代码语言:javascript
复制
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>();

在这里,abc直接对应于你的A、B和C(如果你知道它们有多少元素,你也可以使用数组)。然后,abbc保存从a (或b)的每个元素到b (或c)中相应索引的映射。请注意,无论何时将元素插入到ab中,都必须更新abbc

因此,如果顺序不重要,我会推荐第二种解决方案,因为这样你就不必‘同步’abc

票数 1
EN

Stack Overflow用户

发布于 2012-09-28 15:34:58

代码语言:javascript
复制
//         <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不是很确定。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12634986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档