【问题标题】:Java - Slice any array at stepsJava - 在步骤中对任何数组进行切片
【发布时间】:2016-10-22 03:08:50
【问题描述】:

在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 中是否有与此等价的功能?我一直在寻找这种类型的数组切片,但我没有运气。任何帮助都会很棒,谢谢!

【问题讨论】:

  • 简短回答是;长答案是 noooooooooo
  • 副本真的适用吗?这个问题是关于以设定的间隔进行切片,而链接的问题更适合于获取数组的一般子集(如果它在一个连续的部分中是可行的),仅在一个答案的 cmets 中提到切片.无论哪种方式,我都同意这个结论;没有内部方法可以做到这一点,但您可以轻松地为其编写一个辅助函数。
  • 哦,我以为他正在尝试获取数组的前几个元素。对不起这个问题的错误答案。将删除评论。谢谢@Ironcache 指出这一点。

标签: java arrays arraylist slice


【解决方案1】:

数组中有一种方法可能会有所帮助。

 int[] newArr = Arrays.copyOfRange(arr, 5,10); 

它显然远不如 python 实现强大。

【讨论】:

  • 这不符合 OP 的具体要求。
【解决方案2】:

如果您使用的是 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]

【讨论】:

    【解决方案3】:

    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;
    }
    

    Example

    请注意,如果您可以使用 Java 8,Michael 的回答会更好(或者至少不那么冗长)。

    【讨论】:

    • “您可以编写辅助函数”并不是许多语言开箱即用的基本功能的答案。当然我们可以自己写,我们总是可以自己写。
    • 我不明白你的意思。 Java(正在讨论的语言)没有开箱即用(正如我在答案中所述);这就是问题所在,这里没有任何答案可以解决缺乏内置语法来处理这个问题。
    猜你喜欢
    • 2016-04-03
    • 1970-01-01
    • 2019-08-31
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多