如何将String转换为数组的名称?

时间:2013-10-24 08:12:14

标签: java arrays

我有大量包含不同数据的数组。每个名称都有一个名称: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 个答案:

答案 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<>();

它允许您根据名称获取ListArray 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)的机制可用于执行您想要的操作。但是,一般而言,您不希望这样做,因为您通常可以使用更面向对象的方法来更清洁。