[英]Transposing 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個術語。
歡迎以下任何解決方案:
使用Map數據結構(例如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);
如果每一行都有兩個值,第一個是術語,第二個是定義,你可以像這樣構建一個Map
(順便說一句,這個while
循環與你的for
循環完全相同):
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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.