我的应用程序中有两个String数组,一个包含国家名称,另一个包含相应的扩展代码,但问题是国家名称没有按字母顺序排序,
public static final String[] m_Countries = {
"---select---", "Andorra", ...., "Zimbabwe"};
public static final String[] m_Codes = {
"0", "376",...., "263"};
这些是数组,
所以我的问题是,有没有办法对第一个数组进行排序,这样第二个数组也会改变到相应的位置而不编写我自己的代码? 如果没有,那么我可以用于这些阵列的最佳排序方法是什么? 任何形式的帮助将不胜感激。
答案 0 :(得分:2)
方法1。
您可以创建一个hashMap来将原始国家/地区存储到代码中。
private void handle(String[] m_Countries, String[] m_Codes, Map<String, String> map) {
if (m_Codes == null || m_Countries == null || map == null) {
return;
}
//
final int codeCount = m_Codes.length;
final int countryCount = m_Countries.length;
final int count = Math.min(codeCount, countryCount);
for (int i = 0; i < count; i++) {
map.put(m_Countries[i], m_Codes[i]);
}
// TODO sort
// get code by country name by map.get(country)
}
方法2。
您可以创建包含国家/地区和代码的对列表。然后对列表进行排序。
private List<Pair<String, String>> sortCountryWithCode(String[] m_Countries, String[] m_Codes) {
if (m_Codes == null || m_Countries == null) {
return null;
}
//
final int codeCount = m_Codes.length;
final int countryCount = m_Countries.length;
final int count = Math.min(codeCount, countryCount);
if (count == 0) {
return null;
}
// generate a list
List<Pair<String, String>> list = new ArrayList<>();
for (int i = 0; i < count; i++) {
list.add(new Pair<String, String>(m_Countries[i], m_Codes[i]));
}
// sort
Collections.sort(list, new Comparator<Pair<String, String>>() {
@Override
public int compare(Pair<String, String> lhs, Pair<String, String> rhs) {
return lhs.first.compareToIgnoreCase(rhs.first);
}
});
return list;
}
充满爱的代码。 :)
答案 1 :(得分:2)
从数组中创建TreeMap,并对所有数据进行排序。之后用Key和Values填充各自的数组。
TreeMap<String, String> map = new TreeMap<>();
int length = m_Countries.length;
for(int i=0;i<length;i++){
map.put(m_Countries[i], m_Codes[i]);
}
String[] countries = map.keySet().toArray(new String[map.keySet().size()]);
System.out.println("Country:"+Arrays.toString(countries));
String[] codes = map.values().toArray(new String[map.values().size()]);
System.out.println("Codes:"+Arrays.toString(codes));
<强>结果:强>
Country:[---select---, Afghanistan, ..., Zimbabwe]
Codes:[0, 93,.... , 263]