Arrays.binarySearch 直接使用於 android resource 的問題

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

張貼留言

Twitter Delicious Facebook Digg Stumbleupon Favorites More

 
Design by Free WordPress Themes | Bloggerized by Lasantha - Premium Blogger Themes | Affiliate Network Reviews