為了方便使用陣列常常會直接在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);