我有大量包含不同数据的数组。每个名称都有一个名称:rsf_wings, isa_wings, isa_ships, isa_civs
等。
我有一个函数可以从传递给它的各种组件中构建String arrayName
:
public static void AddShips(String fac, String type)
{
String member = null;
String arrayName = fac+"_"+type;
}
现在我需要一些方法将此 arrayName 转换为数组的实际名称。它大概应该是这样的:
member = arrayName[(int) (arrayName.length * Math.random())];
答案 0 :(得分:4)
无法用Java做到这一点。而是使用Map来按名称存储不同的数组。
Map<String, int[]> arrayMap ...
int[] myArray = arrayMap.get(arrayName);
答案 1 :(得分:1)
我现在有两种可能的方法。
首先是简单地使用你想要的数组:
Map<String, YourObject[]> yourMap = new HashMap<>();
但如果您已经使用了地图,则应考虑使用列表:
Map<String, List<YourObject>> yourMap2 = new HashMap<>();
它允许您根据名称获取List
或Array
YourObject
。
答案 2 :(得分:1)
如果将数组放入地图中,您可以执行类似的操作。
public class Holder {
private Map<String, int[]> arrays = new HashMap<String, int[]>();
public Holder(String... names) {
for (String name : names) {
arrays.put(name, new int[1024]);
}
}
public void addShips(String fac, String type)
{
String arrayName = fac+"_"+type;
int[] array = arrays.get(arrayName);
...
}
}
我建议使用List<Integer>
,ArrayList<Integer>
代替int []。
public class Holder {
private Map<String, List<Integer>> arrays = new HashMap<String, List<Integer>>();
public Holder(String... names) {
for (String name : names) {
arrays.put(name, new ArrayList<Integer>());
}
}
public void addShips(String fac, String type)
{
String arrayName = fac+"_"+type;
List<Integer> array = arrays.get(arrayName);
...
}
}
答案 3 :(得分:0)
有一种称为反射(WP)的机制可用于执行您想要的操作。但是,一般而言,您不希望这样做,因为您通常可以使用更面向对象的方法来更清洁。