如何在Java中将数组转换为表?
假设我有一个数组如何在Java中将数组转换为表?,java,arrays,collections,Java,Arrays,Collections,假设我有一个数组 [1,2,3,4,5,6,7,8,9,10,11,12] 是否有任何标准方法将其转换为具有N列的表 例如,如果N=3: [[1,2,3],[4,5,6],[7,8,9],[10,11,12]] 或者如果N=4: [[1,2,3,4],[5,6,7,8],[9,10,11,12]] 等等。我们可以这样做: int n = 5; // what ever size you want to break it with int[] bytes = {1,2,3,4,5,6,7,
[1,2,3,4,5,6,7,8,9,10,11,12]
是否有任何标准方法将其转换为具有N
列的表
例如,如果N=3
:
[[1,2,3],[4,5,6],[7,8,9],[10,11,12]]
或者如果N=4
:
[[1,2,3,4],[5,6,7,8],[9,10,11,12]]
等等。我们可以这样做:
int n = 5; // what ever size you want to break it with
int[] bytes = {1,2,3,4,5,6,7,8,9,10,11,12};
int length = bytes.length;
int counter = 0;
int newSize = length % n == 0 ? length/n : (length/n)+1;
int[][] newArray = new int[newSize][n];
for (int i = 0; i < length - n + 1; i += n)
newArray[counter++] = Arrays.copyOfRange(bytes, i, i + n);
if (length % n != 0)
newArray[counter] = Arrays.copyOfRange(bytes, length - length % n, length);
int n=5;//你想用多大的尺码来打破它
int[]字节={1,2,3,4,5,6,7,8,9,10,11,12};
int length=bytes.length;
int计数器=0;
int newSize=长度%n==0?长度/n:(长度/n)+1;
int[]newArray=newint[newSize][n];
对于(int i=0;i
仅用于循环:
int[] array = {1,2,3,4,5,6,7,8,9,10,11,12};
int n = 3;
int m = (int) Math.ceil( ( (double) array.length ) / n );
int[][] table = new int[m][n];
int k = 0;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (k < array.length) {
table[i][j] = array[k];
k++;
}
}
}
int[]数组={1,2,3,4,5,6,7,8,9,10,11,12};
int n=3;
int m=(int)Math.ceil(((double)array.length)/n;
int[][]表=新的int[m][n];
int k=0;
for(int i=0;i
输出应该是您所要求的。不是真的,但是您可以使用一些数学和循环轻松创建一个输出:
public int[][] getTable(int[] arr, int n) {
int[][] table = new int[(int)Math.ceil(arr.length / (float)n)][n];
for (int i = 0, row = 0, column = 0; i < arr.length; i++) {
if (i % n == 0 && i != 0) {
row++;
column = 0;
}
table[row][column++] = arr[i];
}
return table;
}
公共int[]getTable(int[]arr,int n){
int[]table=newint[(int)Math.ceil(arr.length/(float)n)][n];
for(int i=0,行=0,列=0;iIntStream
生成相应的索引,这些索引将提供给数组.copyOfRange
我回答了一个类似的问题,您可以找到逻辑,但这里稍微修改了一下,将数组作为参数:
static List<int[]> partitionIntoList(int[] arr, int pageSize) {
return IntStream.range(0, (arr.length + pageSize - 1) / pageSize)
.mapToObj(i -> Arrays.copyOfRange(arr, i * pageSize, min(pageSize * (i + 1), arr.length)))
.collect(toList());
}
static int[][] partitionIntoArray(int[] arr, int pageSize) {
return IntStream.range(0, (arr.length + pageSize - 1) / pageSize)
.mapToObj(i -> Arrays.copyOfRange(arr, i * pageSize, min(pageSize * (i + 1), arr.length)))
.toArray(int[][]::new);
}
产出:
[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
如果页面大小为5,最后两个元素将添加到第三个数组中:
[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12]]
希望有帮助!:) 如果在你的例子中,
N=5
,我的回答正确吗?[[1,2,3,4,5],[6,7,8,9,10],[11,12]
我认为这并没有足够的通用性,所以会有库,但它应该非常简单?@DoubleDouble在我的例子中,它总是一个表,但如果不是,可能为原语填充0,为要填充的对象填充null:[[1,2,3,4,5],[6,7,8,9,10],[11,12,0,0,0]]我不知道我是否喜欢Java8:-)
[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12]]