Java - 按步骤对任何数组进行切片
Java - Slice any array at steps
在 python 中,我们可以执行以下操作:
array = [0,1,2,3,4,5,6,7,8,9,10]
new_array= array[::3]
print(new_array)
>>>[0,3,6,9]
在 Java 中是否有与此等效的内容?我一直在寻找这种类型的数组切片,但我一直没有运气。任何帮助都会很棒,谢谢!
Arrays 中有一个方法可能会有所帮助。
int[] newArr = Arrays.copyOfRange(arr, 5,10);
它显然远不如 python 实现强大。
如果您使用的是 Java 8,那么您可以使用流并执行以下操作:
int [] a = new int [] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
// filter out all indices that evenly divide 3
int [] sliceArr = IntStream.range(0, a.length).filter(i -> i % 3 == 0)
.map(i -> a[i]).toArray();
System.out.println(Arrays.toString(sliceArr));
输出:
[0, 3, 6, 9]
Java 对此没有内置机制。你可以写一个辅助函数:
public static int[] sliceArray(int[] arr, int spacing) {
int curr = 0;
int[] newArr = new int[((arr.length - 1) / spacing) + 1];
for (int i = 0; i < newArr.length; ++i) {
newArr[i] = arr[curr];
curr += spacing;
}
return newArr;
}
请注意,如果您可以利用 Java 8.
,Michael 的回答会更好(或至少不那么冗长)
在 python 中,我们可以执行以下操作:
array = [0,1,2,3,4,5,6,7,8,9,10]
new_array= array[::3]
print(new_array)
>>>[0,3,6,9]
在 Java 中是否有与此等效的内容?我一直在寻找这种类型的数组切片,但我一直没有运气。任何帮助都会很棒,谢谢!
Arrays 中有一个方法可能会有所帮助。
int[] newArr = Arrays.copyOfRange(arr, 5,10);
它显然远不如 python 实现强大。
如果您使用的是 Java 8,那么您可以使用流并执行以下操作:
int [] a = new int [] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
// filter out all indices that evenly divide 3
int [] sliceArr = IntStream.range(0, a.length).filter(i -> i % 3 == 0)
.map(i -> a[i]).toArray();
System.out.println(Arrays.toString(sliceArr));
输出: [0, 3, 6, 9]
Java 对此没有内置机制。你可以写一个辅助函数:
public static int[] sliceArray(int[] arr, int spacing) {
int curr = 0;
int[] newArr = new int[((arr.length - 1) / spacing) + 1];
for (int i = 0; i < newArr.length; ++i) {
newArr[i] = arr[curr];
curr += spacing;
}
return newArr;
}
请注意,如果您可以利用 Java 8.
,Michael 的回答会更好(或至少不那么冗长)