gpt4 book ai didi

arrays - 如何将数组切片绑定(bind)到原始数​​组,以便对一个数组进行的所有更改都对两者进行?

转载 作者:行者123 更新时间:2023-12-04 02:30:02 26 4
gpt4 key购买 nike

我需要能够将数组切片绑定(bind)到原始数​​组,这样对原始数组所做的任何更改(包括删除元素)也会对数组切片进行。有没有办法做到这一点?

以下示例不工作我希望它如何,但它只是为了证明我想要表达的观点。

示例:

my @array = 1 .. 10;
my @slice = @array[3 .. 8];

splice @array, 5, 2;

print "ARRAY: ";
print join ', ', @array;
print "\n";

print "SLICE: ";
print join ', ', @slice;

输出:
ARRAY: 1, 2, 3, 4, 5, 8, 9, 10
SLICE: 4, 5, 6, 7, 8, 9

我正在寻找一种将切片绑定(bind)到原始数​​组的方法,因此输出看起来像这样:
ARRAY: 1, 2, 3, 4, 5, 8, 9, 10
SLICE: 4, 5, 8, 9

从原始数组中删除 6 和 7 也会将其从数组切片中删除。

我怎样才能实现这样的目标?

最佳答案

使用面向对象的方法根据要求更新了帖子。在 <========> 行之后保持原始响应

这是评论中提到的面向对象的方法。
sample .pm

package Sample;
use strict;
use warnings;
use Exporter qw(import);
use List::MoreUtils qw(first_index);
our @y = qw (3 4 5 6 7 8 9); # Add your method of acquiring @y value here
our @EXPORT = qw (SpliceV2 @y);

## Your Splice Version 2

sub SpliceV2(@) {
my ($position,$length,@x) = @_;
for (my $i=1;$i<=$length;$i++) {
my $removeditem = $x[$position];
my $remove = first_index { $_ eq $removeditem } @y;
splice @x, $position, 1;
splice @y, $remove, 1;
}

return @x;
}

1;

主脚本:
#!/usr/bin/perl
use Sample;
my @x = qw(1 2 3 4 5 6 7 8 9 10);

@x = SpliceV2(4,2,@x);
print "X: @x\n";
print "Y: @y\n";

下面是原帖
<===========>
假设您要删除的项目是唯一的,就像您基于数据库的主键一样,那么您可以使用 List::MoreUtils 中的 first_index;

这是一个示例。
use List::MoreUtils qw(first_index);
my @x = qw (1 2 3 4 5 6 7 8 9 10);
my @y = qw (4 5 6 7 8 9);

## Let's say you want to remove 2 items after the 5th index

my $position = 5;
my $length = 2;

## Get the value of items to remove first

for (my $i=1;$i<=$length;$i++) {
my $removeditem = $x[$position];
my $remove = first_index { $_ eq $removeditem } @y;
splice @x, $position, 1;
splice @y, $remove, 1;
}
print "Array X\n";
print "$_," foreach(@x);
print "\nArray Y\n";
print "$_," foreach(@y);
print "\n";

你应该得到你想要的结果。
Array X
1,2,3,4,5,8,9,10,
Array Y
4,5,8,9,

关于arrays - 如何将数组切片绑定(bind)到原始数​​组,以便对一个数组进行的所有更改都对两者进行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38960576/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com