首页 > 解决方案 > “轮流”组合两个数组的元素

问题描述

我想“轮流”组合两个数组的元素。

结果必须是:[a,1,b,2,c,3,d,4,e,5]

    int[] mas1 = {1,2,3,4,5};
    String[] mas2 ={"a","b","c","d","e"};

    System.out.print("[");
    for (int i = 0; i <mas1.length ; i++) {
        System.out.print(mas2[i]+","+mas1[i]+",");

    }
    System.out.println("]");

它的工作。但是还有另一种聪明的方法来实现它吗?

标签: javaarrays

解决方案


@Bambam 提出了一些非常好的解决方案,如果你想要的总是与 2 个相同大小的数组有关,我肯定会应用其中一个。

但是,如果您希望两个具有不同大小的数组并且独立于它们的类型,您可以使用类似于以下的解决方案:

public List<String> addRecursively(int index, Object[] array1, Object[] array2, List<String> list){
    if(index < array1.length)
        list.add(String.valueOf(array1[index]));
    if(index < array2.length)
        list.add(String.valueOf(array2[index]));
    if(index >= array1.length && index >= array2.length)
        return list;

    return addRecursively(index+1, array1, array2, list);
}

以下是如何使用此方法的示例:

Integer[] arrayOfIntegers = new Integer[]{1,2,3,4,5};
String[] arrayOfStrings = new String[]{"a","b","c","d","e","f","g","h"};
List<String> unified = addRecursively(0,arrayOfStrings,arrayOfIntegers,new ArrayList<String>);

//output = a1b2c3d4e5f6g
for(String str:unified) System.out.print(str)
//output = [a, 1, b, 2, c, 3, d, 4, e, 5, f, 6, g]
System.out.println(Arrays.toString(list.toArray())); 

请注意:您不能在此方法中使用原始类型。您的数组需要包装原始数据类型,这是通过装箱实现的。如果你的数组已经被实例化为原始类型,你可以像这样在 Java 8 中转换它们:

int [] primitive = //some value here;
Integer[] wrapped = IntStream.of(primitive).boxed().toArray(Integer[]::new);

你绝对可以使用这个答案中的 HashMap并在上述方法中实现它。

我希望每个人都觉得这个答案简单易懂。


推荐阅读