Java 转置阵列

Java 转置阵列,java,android,arrays,transpose,Java,Android,Arrays,Transpose,我正在使用以下代码读取CSV文件: String next[] = {}; List<String[]> dataArray = new ArrayList<String[]>(); try { CSVReader reader = new CSVReader(new InputStreamReader(getAssets().open("inputFile.csv"))); for(;;) { next = re

我正在使用以下代码读取CSV文件:

  String next[] = {};
  List<String[]> dataArray = new ArrayList<String[]>();

  try {
      CSVReader reader = new CSVReader(new InputStreamReader(getAssets().open("inputFile.csv")));
      for(;;) {
          next = reader.readNext();
          if(next != null) {
              dataArray.add(next);
          } else {
              break;
          }
      }
  } catch (IOException e) {
      e.printStackTrace();
  }
为了访问数组中的一个字符串,我使用以下代码:

dataArray.get(rowNumber)[columnNumber]
但是,我需要能够生成所有术语的列表,以便可以为字典应用程序显示它们。据我所知,单独访问列比访问行的过程要长得多(我来自MATLAB背景,这很简单)

似乎为了能够随时访问我输入的任何一行数据,我最好转换数据并以这种方式读取它;i、 e:

Term 1, Term 2, Term3
Definition 1, Definition 2, Definition 3
当然,我可以首先提供一个转置的CSV文件,但Excel或OO Calc不允许超过256行,我的字典包含大约2000个术语

欢迎下列任何解决办法:

  • 数组读入后进行转置的一种方法
  • 对上面发布的代码的修改,以便它以“转置”的方式读入数据
  • 一种将数组的整列作为一个整体读取的简单方法

使用地图数据结构(例如)可能会更好:

第二列是

dataMap.keySet();
dataMap.values();
注意这里的一个假设:输入数据的第一列都是唯一的值(即“术语”列中没有重复的值)

要能够以数组形式访问键(术语),只需执行以下操作:

String[] terms = new String[dataMap.keySet().size()];
terms = dataMap.keySet().toArray(terms);

如果每一行有两个值,其中第一个值是术语,第二个值是定义,您可以像这样构建一个值(顺便说一句,这个
,而
循环的作用与
for
循环的作用完全相同):

或所有类似的定义:

for (String term: dataMap.keySet()) {
    String definition = dataMap.get(term);
}

为什么不使用
Map
术语作为键,def作为值?您能详细说明一下吗?恐怕这是我第一次涉足Java;我是MATLAB guya
Map
是一种java对象,请看,您将所有(术语=>定义)放入其中,映射将为您提供查找(按术语)、键的唯一性、键的列表…我需要能够将第一列加载到列表对象中,以便将它们作为一个整体显示。我以前的代码如下所示:String[]terms=dataArray.get(0);setListAdapter(新的ArrayAdapter(此,R.layout.list_项,术语));如果我将第一行替换为字符串[]terms=dataMap.keySet();,我被告知无法将集合转换为字符串[]没问题。查看我上面的编辑,但基本上可以归结为
dataMap.keySet().toArray()
String[] terms = new String[dataMap.keySet().size()];
terms = dataMap.keySet().toArray(terms);
String next[] = {};
Map<String, String> dataMap = new HashMap<String, String>();

try {
    CSVReader reader = new CSVReader(new InputStreamReader(getAssets().open("inputFile.csv")));
    while((next = reader.readNext()) != null) {
        dataMap.put(next[0], next[1]);
    }
} catch (IOException e) {
    e.printStackTrace();
}
String definition = dataMap.get(term);
for (String term: dataMap.keySet()) {
    String definition = dataMap.get(term);
}