如何解决在perl中,如何提取数组数组中已经存在的子数组?
@BIG
是一个数组数组。它具有子数组0,子数组1等。我想选择任何子数组,仅通过其索引指定它,然后将其确切值(包括其结构)复制或分配给my @extracted_subarray
,而无需更改{{ 1}}。
下面的代码创建并打印@BIG
的示例。然后,使用@BIG
的最后一行设法将第二个(索引1)子数组的值分配给pop
。这不是我想要的,因为
- 它仅获取
my @extracted_subarray
的最后一个子数组,而我想通过其索引指定任何现有的子数组。 - 它从
@BIG
中删除了子数组,而我想让@BIG
不受干扰。
当然,必须有一种简单的方法来做到这一点。因为我在@BIG
(r-project.org)中进行了大量编码,所以我认为这是一项非常基本的任务。但是“从数组数组中提取子数组”似乎不是正确的搜索词。它提出了比此问题更复杂的解决方案。
R
中的两个块
在阅读这篇文章的一些人中提出了问题。因此,一个解释。我的实际应用不会有像这样的硬编码数据元素。我将遍历一个文本文件,该文本文件包含用于数组各个元素的单独行,并从文本文件构建数组。
尤其是,以{...}
开头的行将发出新的子数组信号。 @
之后的字符串将是@
子子数组中的唯一元素。该行之后将出现以@atsign
开头的任意行,这些行将成为@EQsign子子数组的元素。因此,在实际代码中,每次我们到达=
之类的行时,子数组都会被初始化。在@hrdl:raw_:in:__:
之类的每一行中,另一个元素将被推到=\.(((tex)|(txt))|((TEX)|(TXT)))
上。
但是我的问题与前两段无关。
我的问题是如何提取与0到@EQsign
之间的任何索引对应的数组。例如,如果我指定索引1,我希望(scalar @BIG) -1)
的内容和结构与在迭代1中构建的@extracted_subarray
的内容和结构相同。在下面的示例中,这意味着{ {1}}存在于第二个区块中。
我希望@tmparray
和@tmparray
彼此独立存在。两者都不应该仅仅是一个指针或对另一个的引用。因此,如果随后更改@extracted_subarray
或@BIG
,我希望另一个数组不受影响。
@tmparray
解决方法
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',theme: ThemeData(
primarySwatch: Colors.blue,visualDensity: VisualDensity.adaptivePlatformDensity,),home: BottomSheetTestPage(),);
}
}
class BottomSheetTestPage extends StatefulWidget {
@override
_BottomSheetPageState createState() => _BottomSheetPageState();
}
class _BottomSheetPageState extends State<BottomSheetTestPage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('bottom sheet'),body: ListView.builder(
itemBuilder: (BuildContext context,int index) {
return ListTile(
title: Text(index.toString()),subtitle: Text("${index}"),);
},itemCount: 300,bottomSheet: Container(
width: MediaQuery.of(context).size.width,child: RaisedButton(
child: Text('PROCEED'),onPressed: () {},);
}
}
包含对数组的引用。您可以通过以下方式获得其中之一:
@BIG
然后,您可以执行诸如my $sub_array = $BIG[0];
,for (@$sub_array)
等之类的事情。请参见perlreftut。
请记住,$sub_array->[0]
只是对数组的引用,因为您不能将数组放入数组中。要复制引用数组,可以使用
$BIG[0]
您将复制由my @shallow_copy_of_sub_array = @{ $BIG[0] };
($BIG[0]
)引用的数组,该数组的元素也被引用,因此@tmparray
和@shallow_copy_of_sub_array
并不完整独立。例如,更改@BIG
将影响$shallow_copy_of_sub_array[0][0]
。为了解决这个问题,我们可以使用
@BIG
或者我们可以一直复制所有引用的变量。这称为制作深层副本。
my $copy = [
[ $BIG[0][0] ],[ $BIG[0][1] ],];
或
use Storable qw( dclone );
my $deep_copy = dclone($BIG[0]);
顺便
use Cpanel::JSON::XS qw( encode_json decode_json );
my $deep_copy = decode_json(encode_json($BIG[0]));
很浪费。您正在为数组复制而已。 ({
my @tmparray;
my @atsign;
my @EQsign;
push @atsign,'hrdl:raw_:in:__:';
push @EQsign,( '\.(((tex)|(txt))|((TEX)|(TXT)))' );
push @tmparray,[@atsign];
push @tmparray,[@EQsign];
push @BIG,[@tmparray];
}
等效于[ @atsign ]
。)固定:
my @anon = @atsign; \@anon
它仍然很冗长,妨碍了可读性。固定:
{
my @tmparray;
my @atsign;
my @EQsign;
push @atsign,\@atsign;
push @tmparray,\@EQsign;
push @BIG,\@tmparray;
}
您甚至可以使用
{
my @atsign = 'hrdl:raw_:in:__:';
my @EQsign = ( '\.(((tex)|(txt))|((TEX)|(TXT)))' );
push @BIG,[ \@atsign,\@EQsign ];
}
那更清楚了。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。