【问题标题】:Sort two dependent string arrays对两个依赖字符串数组进行排序
【发布时间】:2016-08-15 15:07:56
【问题描述】:

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

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

这些是数组,

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

【问题讨论】:

  • 1.编写一个自定义快速排序,在交换 m_countries 元素的同时交换 m_Codes 元素。 2. 建立关系图 3. 将它们组合成对,并按第一个元素排序

标签: android arrays sorting


【解决方案1】:

从您的数组中形成 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]

【讨论】:

  • 我也在考虑制作一对并排序..但没有得到适当的启动..感谢您节省了我的一天(Y)
  • @Dhaval 从循环中拯救了我的头:-)
【解决方案2】:

方法一。

您可以创建一个 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)
}

方法二。

您可以制作一个包含国家和代码对的列表。然后对列表进行排序。

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

用爱编码。 :)

【讨论】:

  • @Sanoop 如果有效,请不要忘记将答案标记为正确! :)
  • @hyongbai 喜欢第二种方法..我以前没有使用过这个集合..现在你为我开了一个新课程..谢谢(Y)。但是 LOC 令人担忧.. 但是谢谢
猜你喜欢
  • 2016-07-18
  • 2020-02-17
  • 1970-01-01
  • 1970-01-01
  • 2012-08-31
  • 1970-01-01
相关资源
最近更新 更多