簡體   English   中英

將二維數組轉換為一維數組

[英]Convert a 2D array into a 1D array

這是我到目前為止的代碼:

 public static int mode(int[][] arr) {
      ArrayList<Integer> list = new ArrayList<Integer>();
      int temp = 0;
      for(int i = 0; i < arr.length; i ++) {
          for(int s = 0; s < arr.length; s ++) {
              temp = arr[i][s];

我似乎在這一點上被困在如何將[i][s]放入一維數組中。 當我執行print(temp) ,我的二維數組的所有元素一次按順序打印一個,但無法弄清楚如何將它們放入一維數組中。 我是新手:(

如何將二維數組轉換為一維數組?

我正在使用的當前 2D 陣列是 3x3。 如果背景有任何重要性,我試圖找到二維數組中所有整數的數學模式。

你幾乎做對了。 只是一個小小的改變:

public static int mode(int[][] arr) {
    List<Integer> list = new ArrayList<Integer>();
    for (int i = 0; i < arr.length; i++) {
        // tiny change 1: proper dimensions
        for (int j = 0; j < arr[i].length; j++) { 
            // tiny change 2: actually store the values
            list.add(arr[i][j]); 
        }
    }

    // now you need to find a mode in the list.

    // tiny change 3, if you definitely need an array
    int[] vector = new int[list.size()];
    for (int i = 0; i < vector.length; i++) {
        vector[i] = list.get(i);
    }
}

在 Java 8 中,您可以使用對象流將矩陣映射到向量。

將任意類型和任意長度的對象矩陣轉換為向量(數組)

String[][] matrix = {
    {"a", "b", "c"},
    {"d", "e"},
    {"f"},
    {"g", "h", "i", "j"}
};

String[] array = Stream.of(matrix)
                       .flatMap(Stream::of)
                       .toArray(String[]::new);

如果您正在尋找特定於 int 的方式,我會選擇:

int[][] matrix = {
    {1, 5, 2, 3, 4},
    {2, 4, 5, 2},
    {1, 2, 3, 4, 5, 6},
    {}
};

int[] array = Stream.of(matrix) //we start with a stream of objects Stream<int[]>
                    .flatMapToInt(IntStream::of) //we I'll map each int[] to IntStream
                    .toArray(); //we're now IntStream, just collect the ints to array.

“如何將二維數組轉換為一維數組?”

        String[][] my2Darr = .....(something)......
        List<String> list = new ArrayList<>();
        for(int i = 0; i < my2Darr.length; i++) {
            list.addAll(Arrays.asList(my2Darr[i])); // java.util.Arrays
        }
        String[] my1Darr = new String[list.size()];
        my1Darr = list.toArray(my1Darr);

改成:

 for(int i = 0; i < arr.length; i ++) {
          for(int s = 0; s < arr[i].length; s ++) {
              temp = arr[i][s];

我不確定您是想將二維數組轉換為一維數組(如您的問題所述),還是將二維數組中的值放入您擁有的 ArrayList 中。 我會假設第一個,但我很快就會說你需要為后者做的就是調用list.add(temp) ,盡管temp在你當前的代碼中實際上是不需要的。

如果您嘗試使用一維數組,那么以下代碼就足夠了:

public static int mode(int[][] arr)
{
  int[] oneDArray = new int[arr.length * arr.length];
  for(int i = 0; i < arr.length; i ++)
  {
    for(int s = 0; s < arr.length; s ++)
    {
      oneDArray[(i * arr.length) + s] = arr[i][s];
    }
  }
}

我知道它已經得到了回答,但這是我的看法。 此函數將采用二維數組輸入並返回一維數組輸出。

public int[] output(int[][] input){
    int[] out = new int[input.length * input[0].length]
    for (int i = 0; i < input.length; i++) {
        for (int j = 0; j < input[i].length; j++) { 
            out[i + (j * input.length)] = input[i][j]
        }
    }
    return out;
}

導入 java.util.*;

公共課主要{

public static int A[][] = new int[3][3];
public static int B[] = new int[9];




public static void main(String[] args) {


    int temo = 0,t;

    Scanner s = new Scanner(System.in);

     System.out.println("Enter No for Matrix A");

     for (int row = 0; row < A.length; row++) {
            for (int col = 0; col < A.length; col++) {
                A[row][col] = s.nextInt();
            }
            System.out.print("\n");
        }


     for (int row = 0; row < A.length; row++) {
            for (int col = 0; col < A.length; col++) {
                    t= A[row][col];
                    B[temo]= t;
                    temo++;

            }
            System.out.print("\n");
        }

     System.out.print("After Converted to one d \n");
     for(int i =0;i<B.length;i++) {
         System.out.print(" "+B[i]+" ");
     }

}

}

System.arraycopy 應該比我們能寫的任何東西都快。 還可以在行上使用內置的 java 迭代器。 這是雙數組的示例。 您應該能夠使用任何類型或類。 如果您的行長度都相同,則 totalNumberElements = array2D.length * array2D[0].length;

static double[] doubleCopyToOneD(double[][] array2D, int totalNumberElements) {
    double[] array1D = new double[totalNumberElements];
    int pos = 0;
    for (double[] row: array2D) {
        System.arraycopy(row, 0, array1D, pos, row.length);
        pos += row.length;
    }
    return array1D;
}

暫無
暫無

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

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