繁体   English   中英

从数组中删除前 n 个元素的逻辑

[英]Logic to remove first n elements from an array

我需要为赋值编写的方法之一应该是从数组中删除前 n 个元素。 但是,我没有得到正确的输出。 我相信我犯了一个错误,但我不确定如何解决它。

解决方案应该尽量保持代码的格式。

        for (int i = n; i >= 0; i--) {
            elementData[i] = elementData[i + 1];
            size--;
        }

代码的意思是,对于 n 及以下的每个元素,将其替换为索引中高于它的任何元素。 然后每次执行此操作时都减小大小变量,这应该会导致它在打印时看起来像一个删除操作。

我预计 [0, 1, 2, 4, 6, 4, 7] 的输出为 [4, 7]。

然而,我得到了[7]。

在上述情况下,n 被传递为 5。

我意识到这是一个寻找实现的分配问题,但任何在 Java 中执行此操作的人都应该使用提供的 API。 例如:

public int[] trimArray(int[] source, int trimBy) {
  if (trimBy > source.length) return source;
  return Arrays.copyOfRange(source, trimBy, source.length);
}

trimArray(new int[]{0, 1, 2, 4, 6, 4, 7}, 5) // -> [4, 7]

你可以只使用这个:

int[] result = new int[elementData.length - n];
for (int i = 0; i < result.length; i++) {
    result[i] = elementData[n + i];
}

这是这个的扩展形式:

int[] result = new int[elementData.length - n];
System.arraycopy(elementData, n, result, 0, result.length);

您可以使用过滤器:

let a = [0, 1, 2, 4, 6, 4, 7]

你想获得[4, 7]删除5第一个元素所以输入

a = a.filter((_, i) => i >= 5)

现在

a = [4, 7]
elementData = Arrays.copyOfRange( elementData, n, elementData.length ); // originalArray, startIndex, end

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM