簡體   English   中英

如何在Java中將二維數組轉換為一維數組

[英]How can you convert a 2 dimensional array into a 1 dimensional array in Java

我想知道如何將二維數組轉換為一維數組。 我已經提出了一些代碼,但它似乎並不完全正常。 有人可以幫幫我嗎? 謝謝。

public class TESTER1 {

    /**
     * @param args
     */

    static String[][] data = new String[][] {{"Dum","Dumer","Dumbest"}};

    public static void main(String[] args) {

        convertData(data);
    }

    public static void convertData(String[][]data) {
        String[] toReturn = new String[data.length];
        for(int i = 0;i<data.length;i++) {
            for(int j = 0;j<3;j++){
                toReturn[i] = data[i][j];
            }
        }
        for(String s:toReturn) {
            System.out.println(s);
        }
    }
}

[編輯]非常感謝你。 是否可以將String [] []中的每一行轉換為String []中的索引,例如,如果我們轉換String [] [](上面的代碼),那么當我打印出數組[0]時,它應該打印out dum,dummer,dumbest [編輯]

public static String[] flatten(String[][] data) {
    ArrayList<String> list = new ArrayList<String>();

    for(int i = 0; i < data.length; i++) {
        for(int j = 0; j < data[i].length; j++){
            list.add(data[i][j]);
        }
    }

    return list.toArray(new String[0]);
}

或者一次添加整行:

    for(int i = 0; i < data.length; i++) {
        list.addAll( Arrays.asList(data[i]) );
    }

編輯:從我的答案的評論看起來這似乎是OP想要的(即將每行2d數組轉換為它的一些字符串表示):

public static String[] rowsToString(String[][] data) {
    ArrayList<String> list = new ArrayList<String>();

    for(int i = 0; i < data.length; i++) {
        String row = Arrays.toString(data[i]);
        list.add( row.substring(1, row.length()-1) );
    }

    return list.toArray(new String[0]);
}

更清潔的版本:

public static String[] flatten(String[][] data) {
    List<String> toReturn = new ArrayList<String>();
    for (String[] sublist : Arrays.asList(data)) {
        for (String elem : sublist) {
            toReturn.add(elem);
        }
    }
    return toReturn.toArray(new String[0]);
}

一維數組的長度必須是二維數組中所有行的長度之和。 當然,Java並不真正擁有“真正的”二維數組,而是數組數組。 此代碼有效,並包含在一個簡單的演示程序中。

public class ArrayFlattening {

public static final String[][] STRINGS2 = {
    {"my", "dog", "has", "fleas"},
    {"how", "now", "brown", "cow"},
    {"short", "row"},
    {"this", "is", "a", "final", "row", "in", "this", "test"},
};

public static String[] flatten(String[][] a2) {
    String[] result = new String[totalSize(a2)];
    int index = 0;
    for (String[] a1 : a2) {
        for (String s : a1) {
            result[index++] = s;
        }
    }
    return result;
}

public static int totalSize(String[][] a2) {
    int result = 0;
    for (String[] a1 : a2) {
        result += a1.length;
    }
    return result;
}

public static void main(String[] args) {
    System.out.println("" + STRINGS2.length + " rows");
    for (String[] strings1 : STRINGS2) {
        System.out.println("" + strings1.length + " strings");
        for (String s : strings1) {
            System.out.print("\t" + s);
        }
        System.out.println();
    }
    String[] strings1 = flatten(STRINGS2);
    System.out.println(strings1.length + " strings");
    for (String s : strings1) {
        System.out.print("\t" + s);
    }
    System.out.println();
}

}

使用流API在Java 8中使Flatten變得更加容易。 該功能可表示為:

private static String[] flatten(String[][] data) {
    return Stream.of(data).flatMap(Stream::of).toArray(String[]::new);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM