如何从匿名 Perl 数组中获取从索引 N 到末尾的所有元素?

发布于 2024-12-14 08:17:01 字数 500 浏览 1 评论 0原文

在 Perl 5 中,当我们有一个命名数组时,例如 @a,从索引 $N 开始获取元素非常简单,只需使用一点 切片

my @result = @a[$N..$#a];

是否有一种标准方法可以对匿名数组执行相同的操作,而无需显式提供长度?即,可以将 this:

my @result = (0,1,2,3,4,5)[2..5];

或者更具体地说,将 this:

my @result = (0,1,2,3,4,5)[$N..5];

转换为不需要明确范围上限的内容吗?也许是一些晦涩难懂的 Perl 语法?也许可以切块而不是切片?

PS:我已经将其编写为一个函数 - 我正在寻找一种更独立的方法。

In Perl 5, when we have a named array, e.g. @a, getting the elements from index $N onwards is simple with a bit of slicing:

my @result = @a[$N..$#a];

Is there a standard way to do the same with an anonymous array, without having to supply the length explicitly? I.e. can this:

my @result = (0,1,2,3,4,5)[2..5];

or, more specifically, this:

my @result = (0,1,2,3,4,5)[$N..5];

be converted to something that does not need the upper range limit to be explicit? Perhaps some obscure Perl syntax? Maybe a bit of dicing instead of slicing?

PS: I have already written this as a function - I am looking for a more self-contained approach.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

挽清梦 2024-12-21 08:17:01

您可以拼接它:

@result = splice @{[0..$M]}, $N;  # return $N .. $M

You can splice it:

@result = splice @{[0..$M]}, $N;  # return $N .. $M
皇甫轩 2024-12-21 08:17:01

我认为 mob 的 splice 是最好的选择,但本着选项的精神:

my @result = reverse ((reverse 0..5)[0..$N+1]);

这返回与上面示例相同的结果:

my @result = (0..5)[$N..5];

I think mob's splice is the best option, but in the spirit of options:

my @result = reverse ((reverse 0..5)[0..$N+1]);

This returns the same result as the above example:

my @result = (0..5)[$N..5];
空气里的味道 2024-12-21 08:17:01

如果将数组引用设置为主题,则不需要为数组引用指定名称:

    sub returns_array_ref {[1 .. 5]}

    my @slice = map @$_[$n .. $#$_] => returns_array_ref;

或者如果您正在使用列表:

    sub returns_list {1 .. 5}

    my @slice = sub {@_[$n .. $#_]}->(returns_list);

You don't need to give an array ref a name if you set it as the topic:

    sub returns_array_ref {[1 .. 5]}

    my @slice = map @$_[$n .. $#$_] => returns_array_ref;

Or if you are working with a list:

    sub returns_list {1 .. 5}

    my @slice = sub {@_[$n .. $#_]}->(returns_list);
夜清冷一曲。 2024-12-21 08:17:01

我只是使用数组变量来获取 len:

@a = (1,2,3,4,5);
print @a[1..@a];
# output: (2,3,4,5)

I just use the array variable to get the len:

@a = (1,2,3,4,5);
print @a[1..@a];
# output: (2,3,4,5)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文