Java 转置阵列
我正在使用以下代码读取CSV文件: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
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 guyaMap
是一种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);
}