2016-04-22 59 views
2

我在我的应用程序两个String数组,包含一个国家的名称,以及其他含有相应的扩展代码,但问题是,国家的名字不按字母顺序正确排列,排序两个因字符串数组

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

这些都是阵列,

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

+1

1.编写自定义快速排序将交换m_Codes元素而swaping的m_countries元素。 2.建立关系图3.将它们组合成一对,然后按照第一个元素 –

回答

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] 
+0

我也在考虑做一对并排序..但没有得到一个合适的kickstart ..感谢节省我的一天(Y) – Sanoop

+0

@Sanoop很高兴为你工作。祝你有美好的一天! –

+0

@Dhaval从循环中拯救了我的头:-) – Hanry

2

方法1.

您可以创建一个哈希映射来存储原始国家代码。

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; 
} 

代码与爱。 :)

+2

@Sanoop进行排序,如果有效的话不要忘记标记答案是正确的! :) –

+0

@hyongbai喜欢第二种方法..我之前没有使用过这个集合。现在你为我开辟了一个新类。谢谢(Y)。但LOC感到担忧..但是,谢谢 – Sanoop

+0

@Sanoop对我表示赞赏,LOL – hyongbai