我知道如何删除并将值拼接到数组。目前我的代码是这样的。
my $newDate ="$dayStr/$monthStr/$yearStr";
delete @CONTENTS[9];
splice(@CONTENTS,9,1,$newDate);
这可以删除并拼接$newDate(DATE)
到第10个位置。但是,我遇到的问题是由于我的用户设置的文件格式,$newDATE(DATE)
并不总是位于第10位。幸运的是,如果从后面算起,$newDate(DATE)
总是固定在第4位。
有关如何执行此操作的任何更改解决方案?如何从后面计算数组,以便我可以到达第4位。
我的预期结果是,如果我们从后面计算,则通过到达第4个位置来删除并将值拼接到数组。
感谢您查看,评论和回答。
答案 0 :(得分:3)
splice
允许从数组末尾开始的负偏移:
my @array = (1..10);
splice @array, -4, 1, ('foo');
print join(',', @array), "\n";
输出:
1,2,3,4,5,6,foo,8,9,10
答案 1 :(得分:1)
这两个命令都允许您使用负索引从数组末尾开始计数。您的代码也删除了@CONTENTS数组中的两个元素。 delete命令删除第9个位置的内容,然后splice命令删除移动到第9个位置的内容,并用$ newDate替换它。
CORRECTION:删除不会删除Miller指出的数组元素。它只删除该值并使其成为undef。这是不必要的,因为您正在使用splice命令删除索引。
这是带负索引的代码。
my $newDate ="$dayStr/$monthStr/$yearStr";
delete @CONTENTS[-4];
splice(@CONTENTS,-4,1,$newDate);
答案 2 :(得分:0)
其他人已提到使用splice
,但作为进一步的评论:不要在数组元素上使用delete
。它不应该起作用,它不能可靠或明确地工作。它只适用于哈希。