如何获取数组中倒数第二个元素之前的元素数



考虑下面有n个元素的int数组。

1, 3, 4, 5, 7。在这个例子中,倒数第二项是5。我想要得到数组中倒数第二个值之前的元素个数。倒数第二个元素之前有3个元素。我将把结果存储在一个int变量中以供稍后使用。显然,我们考虑到数组中总是有两个以上的元素。

这个数组每次的大小都不一样。

我怎样才能以最简单的方式实现这一点?

可以使用c# 8:

int[] arr = new int[]{1, 3, 4, 5, 7};
int[] newArr = arr.Length>=2 ? arr[..^2] : new int[0];

这将返回除最后2之外的所有元素,如果长度小于2则返回空数组。如果保证数组总是包含2个以上的元素,那么可以简化为:

int[] newArr = arr[..^2];

答案总是n-2,所以一个非常快速的解决方案是使用。length属性并减去2。

如果你只对数字的数量感兴趣,那么.Length-2是最好的方法,因为其他人也说过。

如果你对项目也感兴趣,而不使用c# 8的特性,那么你可以使用ArraySegment(1)。
它真的很强大,就像你可以在不影响底层数组的情况下反转项目。

int[] arr = new int[] { 1, 3, 4, 5, 7 };
var segment = new ArraySegment<int>(arr, 0, arr.Length - 2);
var reversedSegment = segment.Reverse();  //ReverseIterator { 4, 3, 1 }
//arr >> int[5] { 1, 3, 4, 6, 7 }

请记住,Span(2)并非如此。

var segment = new Span<int>(arr, 0, arr.Length - 2);
segment.Reverse();
//arr >> int[5] {4, 3, 1, 6, 7 }

有一个ReadOnlySpan,它不允许执行Reverse这样的操作,
如果你需要,那么你必须以相反的顺序手动迭代。

相关内容

最新更新