多くの人が PHP から来て直面しているように見えるのと同じ問題に遭遇しました。適切で使いやすい連想配列ソリューションの欠如です。ここで質問を読みましたが、基本的にはすべて、この Q: Java associative-array のように HashMap を使用することを提案しています。
ただし、言及されている解決策が私の問題を解決するとは思いません。説明します。
データを保存したい 250 項目 (国) のリストがあります。データの長さは未定義です。つまり、「列」ごとに複数のエントリを保持できます。エントリがない場合もあれば、4 つなどの場合もあります。
PHPでは、これを行うことができます:
$country_data = new array();
$country_data["nl"]["currency"] = "euro";
$country_data["nl"]["languages"] = "Dutch";
...
$country_data["us"]["currency"] = "US dollar";
$country_data["us"]["languages"] = array("English", "Spanish");
そのため、配列を保存したい場合とそうでない場合があります。もちろん、文字列ではなく、エントリが 1 つだけの配列でもかまいませんが、私は言っているだけです。
問題は、配列を HashMap の配列に格納してフェッチするにはどうすればよいかということです。醜い HashMap ソリューションにかなりこだわっていることは理解していますが、これで配列を格納する方法がわかりません。単純なものを見落としていると確信しています。私の例に基づいた例は素晴らしいでしょう!
アップデート
HashMaps の HashMaps を選択した理由は、すべてを簡単に監視し、必要に応じて数行の値を変更できる必要があるためです。これは柔軟性があり、国コードや言語に基づいて国名を簡単に取得したり、必要に応じて country_data HashMap やすべての国名などを取得したりできます。
public class iso_countries {
Map<String, Object> country_data = new HashMap<String, Object>();
Map<String, String> country_name = new HashMap<String, String>();
Map<String, String[]> country_idd = new HashMap<String, String[]>();
Map<String, String[]> country_cid = new HashMap<String, String[]>();
public iso_countries(){
country_name.put("nl", "Netherlands");
country_idd.put("nl", new String[]{"+31"});
country_cid.put("nl", new String[]{"#31#", "*31#"});
setData(country_name, country_cid, country_idd);
// 249 * 4 lines more and later...
}//end method
public void setData(Map country_name, Map country_cid, Map country_idd){
country_data.put("name", country_name);
country_data.put("idd", country_idd);
country_data.put("cid", country_cid);
}//end method
public String getCountryName(String countryCode){
String name = country_name.get(countryCode);
return name;
}//end method
public String[] getCountryIdd(String countryCode){
String prefix[] = country_idd.get(countryCode);
return prefix;
}//end method
public String[] getCountryCid(String countryCode){
String cid[] = country_cid.get(countryCode);
return cid;
}//end method
}//end class