為了方便使用陣列常常會直接在array.xml中宣告2個互相對應的陣列 e.g.,
<string-array name="type">
<item>0</item>
<item>1</item>
<item>2</item>
<item>3</item>
<item>4</item>
<item>5</item>
</string-array>
<string-array name="code">
<item>A</item>
<item>C</item>
<item>B</item>
<item>E</item>
<item>F</item>
<item>G</item>
<item>D</item>
</string-array>
若直接在code中使用Arrays.binsearch 會出現 index 錯誤 e.g.,
String[] targetArray = getResources().getStringArray(R.array.type);
int index = Arrays.binarySearch(targetArray, 3);
String[] codeArray = getResources().getStringArray(R.array.code);
原因是因為Arrays.binarySearch只能使用在已經排序(自然排序)過的陣列。
若該陣列還未排序會丟出Exception,說明index有問題。
比較快的解決方式就是自己寫取得對應的元素 e.g.,
private int findSpecifyIndexInArray(String[] targetArray, String specify){
for (int i = 0; i < targetArray.length; ++i) {
if (targetArray[i].equals(specify)) {
return i;
}
}
return -1;
}
String[] targetArray = getResources().getStringArray(R.array.type);
int index = findSpecifyIndexInArray(targetArray, 3);
String[] codeArray = getResources().getStringArray(R.array.code);
Orignal From: Arrays.binarySearch 直接使用於 android resource 的問題
0 意見:
張貼留言