Tôi đã gặp phải vấn đề tương tự với rất nhiều người dường như đối mặt với PHP, việc thiếu một giải pháp mảng kết hợp phong phú và dễ sử dụng. Tôi đã đọc các câu hỏi ở đây về cơ bản tất cả được đề xuất sử dụng HashMap, như thế này: Q: Java associative-arrayCác mảng kết hợp và Java
Tuy nhiên, tôi không nghĩ rằng các giải pháp được đề cập sẽ giải quyết được sự cố của tôi. Tôi sẽ giải thích.
Tôi có danh sách với 250 mục (quốc gia) mà tôi muốn lưu trữ dữ liệu. Dữ liệu có độ dài không xác định, nghĩa là dữ liệu có thể chứa nhiều mục nhập cho mỗi cột "", đôi khi không có mục nhập nào, đôi khi 4, v.v.
trong PHP tôi chỉ có thể làm điều này:
$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");
Vì vậy, đôi khi tôi muốn lưu trữ một mảng, đôi khi không. Ofcourse nó cũng có thể là một mảng với chỉ một mục thay vì một chuỗi, nhưng tôi chỉ nói.
Vì vậy, câu hỏi là, làm thế nào để lưu trữ và tìm nạp mảng trong mảng trong HashMap? Tôi hiểu rằng tôi khá mắc kẹt với giải pháp HashMap xấu xí, nhưng tôi vẫn không thể thấy cách điều này sẽ cho phép tôi lưu trữ các mảng, tôi chắc chắn rằng tôi đang nhìn một cái gì đó đơn giản. Một ví dụ dựa trên của tôi sẽ là tuyệt vời!
CẬP NHẬT
tôi đã lựa chọn để đi cho HashMaps của HashMaps Lý do cho điều này tôi cần để có thể giám sát tất cả mọi thứ một cách dễ dàng, và thay đổi một vài dòng giá trị khi cần thiết. Và điều này là linh hoạt, tôi có thể dễ dàng chỉ lấy tên quốc gia dựa trên mã quốc gia, ngôn ngữ hoặc tôi có thể lấy Hashata quốc gia khi tôi cần hoặc tất cả tên quốc gia, v.v.
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
Bạn muốn hashmap như hành vi trong php hoặc bạn sẽ thực hiện mã trong java? –
Tại sao danh sách của bạn có mã quốc gia và chỉ mục? Không phải '$ country_data [" us "]' hoạt động hoàn toàn ổn chứ? –
chỉ để bình luận về mã PHP của bạn: nó thậm chí không thực hiện bất kỳ ý nghĩa, rằng các loại giá trị trong chỉ mục ''language'' có thể hoàn toàn khác nhau, một khi một chuỗi, một khi một mảng ... bạn nên quyết định bạn thích, và dính vào nó. Các kiểu trộn cho thấy một thực tế mã hóa thực sự xấu, nó làm cho mã của bạn thất thường. EDIT: @Brendan Long: có, đó là một thông báo tốt quá. – Sk8erPeter