【问题标题】:Copying Array Dimensions复制数组维度
【发布时间】:2014-04-29 03:41:21
【问题描述】:

我有一个方法 aModify(),它接受两个对象引用 a1 和 a2,以及两个字符串值 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是3维数组,a2是4维数组。

【问题讨论】:

    标签: arrays cloning


    【解决方案1】:

    我不确定您的方法为什么不直接将参数作为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);
    }
    

    【讨论】:

    • @mynorka,如果这就是你想要做的,请告诉我。
    • 是的,这就是我要找的东西,但看起来它只适用于一种情况。在我的程序中,我将运行两个不同的案例。案例 1 的 dim1 为“0”,dim2 为“0 0”,第二种情况的 dim1 为“0 0”,dim2 为“0 0 0”。我正在寻找一种能够将索引 dim1 处的任何元素复制到索引 dim2 中的方法。
    • 请详细说明案例
    • 案例 1:dim1 是字符串“0”,表示数组 a1 的索引,例如 a1[0]。 dim2 是表示索引 a1[0][0] 的Stirng“0 0”案例2:dim1 是表示a1[0][0] 的字符串“0 0”,dim2 是表示a1[0] 的字符串“0 0 0” [0][0]
    • @mynorka,更新了答案。不保证代码会编译,但这应该会给你一个你需要的草图。
    猜你喜欢
    • 1970-01-01
    • 2013-02-13
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多