【问题标题】:Indexing array by loop from two or more arrays with different length从两个或多个不同长度的数组中循环索引数组
【发布时间】:2018-04-10 04:35:35
【问题描述】:

嘿,我想做一个方法,从三个不同的数组中给我一个数组,这些数组具有不同的长度索引,例如:

[数组元素个数][数组个数]

[0][0],

[0][1],

[0][2],

[1][0],

[1][2]

所以我做了这个:

    int a = 0;
    for (int i = 0; i < collections[a].length; i++) {
        for (int k = 0; k < collections.length; k++) {
            result[p] = collections[i][k];
            p++;
        }
    }

    return result;

但它仅在数组大小相同时才有效,并且我不知道从第一个数组的第二个元素到第三个数组的第二个元素(不包括第二个)时应该添加什么条件以避免“越界”第二个数组的元素甚至不存在。

int[] array3 = { 10, 20, 30, };
int[] array4 = { 40, 50, };
int[] array5 = { 60, 70, 80, 90 };
A.method(array3, array4, array5);

我想要得到的结果是: 10,40,60,20,50,70,30,80,90

【问题讨论】:

标签: java arrays


【解决方案1】:

首先,我找出哪个数组的最大长度。然后我开始两个循环。 “外部”循环索引j 用于访问单个数组的元素,我仅在循环遍历所有单个数组一次后才递增。一旦 j 达到第一步计算的最大长度,我就停止增加 j

private static int[] combine(int[]... arrays) {

    int maxArrayLen = Arrays.stream(arrays).mapToInt(array -> array.length).max().getAsInt();

    List<Integer> list = new ArrayList<Integer>();
    for (int j = 0; j < maxArrayLen; j++) {
        for (int i = 0; i < arrays.length; i++) {
            if (arrays[i].length > j) {
                list.add(arrays[i][j]);
            }
        }
    }
    return list.stream().mapToInt(i -> i).toArray();
}

要调用它:combine(array3, array4, array5);

运行演示:https://ideone.com/F2yxKh

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-28
    • 1970-01-01
    • 2021-09-20
    • 2017-12-06
    • 2021-11-12
    • 1970-01-01
    • 2012-07-29
    • 2016-02-23
    相关资源
    最近更新 更多