3

我有大量包含不同数据的数组。每个都有一个看起来像这样的名称: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())];
4

4 回答 4

4

没有办法在Java中做到这一点。而是使用 Map 来按名称存储不同的数组。

Map<String, int[]> arrayMap ...
int[] myArray = arrayMap.get(arrayName);
于 2013-10-24T08:20:57.100 回答
1

我现在看到有两种可能的方式。

首先是简单地使用你想要的数组:

    Map<String, YourObject[]> yourMap = new HashMap<>();

但是如果你已经在使用地图,你应该考虑使用列表:

    Map<String, List<YourObject>> yourMap2 = new HashMap<>();

它允许您获取ListArray基于YourObject名称。

于 2013-10-24T08:21:13.133 回答
1

如果将数组放入 map 中,您可以执行类似的操作。

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);
        ...
    }
}
于 2013-10-24T08:22:55.737 回答
0

有一种称为反射 ( WP ) 的机制可以用来做你想做的事。但是,通常您不希望这样做,因为您通常可以使用更面向对象的方法来更清洁。

于 2013-10-24T08:21:11.387 回答