2016-04-22 11 views
2

私は自分のアプリケーションに2つの文字列配列、一つは国の名前を含む、その他の拡張コードを対応含む、しかし、問題は国の名前が正しくアルファベット順に並べられていないことであるを持って、ソート2依存文字列配列

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

これらは、配列、

あるだから私の質問は、二番目の配列はまた、自分自身のコードを記述することなく対応する位置に変化するように最初の配列をソートする方法はありますか? そうでなければ、私はこれらの配列に使うことができる最高のソート方法は何ですか? どんな種類の助力でも大歓迎です。

+1

1. m_countries要素をswapingながらm_Codes要素を交換するカスタムクイックソートを書きます。 2.関係マップを構築します。3.それらを組み合わせてペアにし、最初の要素でソートします。 –

答えて

2

あなたの配列からフォームツリーマップとすべてのデータがソートされます。その後、それぞれの配列にキーと値を入力します。

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

私はまた、ペアを作成することを考えていた..しかし、適切なキックスタートを得ていなかった..私の日(Y) – Sanoop

+0

@サノップはあなたのためにうれしいです。良い一日を過ごしてください! –

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

code with love。 :)

+2

@Sanoopもしうまくいけば、答えを正しいとマークすることを忘れないでください! :) –

+0

@hyongbai 2番目の方法が大好きです。私は以前このコレクションを使用していませんでした。今度は、新しいクラスを開いたので、ありがとうございました。しかし、LOCは心配しています..しかし、ありがとう – Sanoop

+0

@Sanoop投票私は感謝されるでしょう、LOL – hyongbai

関連する問題