排序两个依赖字符串数组

时间:2016-04-22 06:08:03

标签: android arrays sorting

我的应用程序中有两个String数组,一个包含国家名称,另一个包含相应的扩展代码,但问题是国家名称没有按字母顺序排序,

     public static final String[] m_Countries = {
        "---select---", "Andorra", ....,  "Zimbabwe"};
     public static final String[] m_Codes = {
        "0", "376",...., "263"};

这些是数组,

所以我的问题是,有没有办法对第一个数组进行排序,这样第二个数组也会改变到相应的位置而不编写我自己的代码? 如果没有,那么我可以用于这些阵列的最佳排序方法是什么? 任何形式的帮助将不胜感激。

2 个答案:

答案 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]