如何在Java中混合两个数组?

Flu*_*ffy 6 java arrays

我有一些String []数组,例如:

['a1', 'a2']
['b1', 'b2', 'b3', 'b4']
['c1']
Run Code Online (Sandbox Code Playgroud)

我如何混合它们,以便得到['a1', 'b1', 'c1', 'a2', 'b2', 'b3', 'b4'](a的0个元素,然后b,c,a,b,c的1个元素等)?谢谢

更准确地说,结果数组必须包含第一个数组的第一个值,然后是第二个数组的第一个值,...,最后一个数组的第一个值,第一个数组的第二个值,......,最后一个数组的第二个值,...,最大数组的最后一个值.如果数组的大小不同,那么较小的数组就不会被考虑在内.

这是一个例子:

a1 a2 a3 a4
b1 b2 b3 b4 b5 b6 b7
c1 c2
d1 d2 d3 d4 d5

Combines into (brackets are just to highlight steps, so they really mean nothing):
(a1 b1 c1 d1) (a2 b2 c2 d2) (a3 b3 d3) (a4 b4 d4) (b5 d5) (b6) (b7)
Run Code Online (Sandbox Code Playgroud)

另外,我想组合可变数量的数组,而不仅仅是3或4

Mau*_*rry 17

String result[] = new String[a.length+b.length+c.length];
for (int i = 0, j = 0; j < result.length; ++i) {
    if (i < a.length) {
        result[j++] = a[i];
    }
    if (i < b.length) {
        result[j++] = b[i];
    }
    if (i < c.length) {
        result[j++] = c[i];
    }
}
Run Code Online (Sandbox Code Playgroud)

更新:更一般地说

String[] merge(String[]... arrays) {
    int length = 0;
    for (String[] a: arrays) {
        length += a.length;
    }
    String result[] = new String[length];
    for (int i = 0, j = 0; j < length; ++i) {
        for (String[] a: arrays) {
            if (i < a.length) {
                result[j++] = a[i];
            }
        }
    }
    return result;
}
Run Code Online (Sandbox Code Playgroud)

  • 为varargs +1 ...现在让它成为通用方法,<T> T [] merge(T [] ...数组)我们正在谈论;)做得好 (2认同)