复制数组维度

时间:2014-04-29 03:41:22

标签: arrays cloning

我有一个方法,aModify(),它接受两个对象引用,a1和a2,以及两个String值,dim1和dim2。

public static Object aModify(Object a1, String dim1, Object a2, String dim2);

a1和a2将作为数组传入,dim1和dim2将作为数组维度传入(即dim1 =" 0",dim2 =" 0 0")。

此方法背后的目标是在dim2处获取数组a2并将在那里找到的值复制到dim1处的a1。

我已成功将两个数组复制到新实例中进行操作,但我真的很困惑如何将字符串值dim1和dim2转换为数组维度,然后使用这些维度复制值。

到目前为止,这就是我对该方法的看法。

Object copy1 = Array.newInstance(a1.getClass().getComponentType(), Array.getLength(a1));
Object copy2 = Array.newInstance(a2.getClass().getComponentType(), Array.getLength(a2));

copy1 = MyUtility.aClone(a1);
copy2 = MyUtility.aClone(a2);

aClone()是我编写的一种方法,它返回传递给方法的任何数组的副本。

阵列a1和a2也有不同的尺寸。数组a1是一个三维数组,其中a2是一个四维数组。

1 个答案:

答案 0 :(得分:0)

我不确定为什么你的方法不直接将参数作为int,但如果你只是想将字符串"0"转换为int,你可以使用Integer.parseInt()

如果要将字符串"0 0"转换为两个单独的整数,可以对结果数组中的每个元素使用String.split()然后Integer.parseInt()

根据您对目标的描述,您可能想要这样的内容吗?

int t_dim1 = Integer.parseInt(dim1);
String[] twodims = dim1.split(" ");
int t_dim2_1 = Integer.parseInt(twodims[0]);
int t_dim2_2 = Integer.parseInt(twodims[1]);

更新:看来OP想要处理任意数量的维度。为此,我们需要更聪明一些。首先,我们编写一个辅助函数。

int[] parseAndConvert(String dims) {
    String[] dimArray = dims.split(" ");
    int[] retVal = new int[dimArray.length];
    for (int i = 0; i < retVal.length; i++) 
       retVal[i] = Integer.parseInt(dimArray[i]);
    return retVal;
}

然后,在aModify内,我们需要做这样的事情来找到元素并设置它。请注意,这是未经测试的,但它应该让你非常接近。

public static Object aModify(Object a1, String dim1, Object a2, String dim2) {
    int[] dims1 = parseAndConvert(dim1);
    int[] dims2 = parseAndConvert(dim2);
    // Find the element to copy.
    Object copyMe = a1;
    for (int i = 0; i < dims1.length; i++) 
         copyMe = java.lang.reflect.Array.get(copyMe, dims1[i]);

    // Find the nested array holding the object we want to overwrite
    Object target = a2;
    for (int i = 0; i < dims2.length - 1; i++) 
         target = java.lang.reflect.Array.get(target, dims2[i]);

    Array.set(target, dims2[dims2.length - 1], copyMe);
}