ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – 转置数组

2019-09-01 21:25:45  阅读:239  来源: 互联网

标签:transpose android java arrays


我使用以下代码读取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();
  }

这会将CSV文件转换为数组’dataArray’.我的应用程序是一个字典类型的应用程序 – 输入数据的第一列是单词列表,第二列是这些单词的定义.以下是加载的数组的示例:

Term 1, Definition 1
Term 2, Definition 2
Term 3, Definition 3

为了访问数组中的一个字符串,我使用以下代码:

dataArray.get(rowNumber)[columnNumber]

但是,我需要能够生成所有术语的列表,以便可以为词典应用程序显示它们.据我所知,访问列是一个比访问行更长的过程(我来自MATLAB背景,这将是简单的).

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

Term 1, Term 2, Term3
Definition 1, Definition 2, Definition 3

当然,我可以提供一个首先转置的CSV文件 – 但Excel或OO Calc不允许超过256行,而我的词典包含大约2000个术语.

欢迎以下任何解决方案:

>一种在读入数组后转置数组的方法
>对上面发布的代码进行更改,以便以“转置”方式读取数据
>一种简单的方法来读取整个数组的整个列

解决方法:

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

String next[] = {};
HashMap<String, String> dataMap = new HashMap<String, String>();

try {
    CSVReader reader = new CSVReader(new InputStreamReader(getAssets().open("inputFile.csv")));
    for(;;) {
        next = reader.readNext();
        if(next != null) {
            dataMap.put(next[0], next[1]);
        } else {
            break;
        }
    }
} catch (IOException e) {
    e.printStackTrace();
}

然后你可以访问第一列

dataMap.keySet();

和第二列

dataMap.values();

请注意这里的一个假设:输入数据的第一列是所有唯一值(即“Term”列中没有重复的值).

为了能够将键(术语)作为数组访问,您可以按如下方式执行:

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

标签:transpose,android,java,arrays
来源: https://codeday.me/bug/20190901/1786255.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有