Perl–数组与列表
Perl 是一种通用的、解释的、动态的编程语言。Perl 有三种基本数据类型,即标量、数组和散列。
Perl 列表
列表是标量值的序列。但是,该列表在 Perl 中不是一个数据结构。在 Perl 中,可以对列表执行的操作非常有限。由于没有变量引用此列表,因此列表不能用于打印以外的操作。
例:
(10, 20, 30);
("this", "is", "a", "list", "in", "perl");
简单列表
简单列表是包含同类元素的列表。
# declaration without variable referencing
print("List declared and printed: ");
print join(' ', 10, 20, 30, 40, 50);
print("\n\n");
# qw() forms list by extracting words
# out of the string using space as a delimiter.
print("List declared using qw(): ");
print join(' ', qw(this is gfg));
print("\n\n");
# indexing
print("Accessing element at index 2: ");
print((10, 20, 30, 40, 50)[2]);
print("\n\n");
# range
print("Range function on list\n");
print join(' ', 1..6);
print("\n\n");
# loop
print("Iterating over list elements:\n ");
foreach $element (1..6)
{
print("$element\t");
}
print("\n\n");
# splicing
print("Splicing list\n");
print("Spliced elements: ");
print join(' ', (1..6)[1..3]);
print("\n\n");
输出:
List declared and printed: 10 20 30 40 50
List declared using qw(): this is gfg
Accessing element at index 2: 30
Range function on list
1 2 3 4 5 6
Iterating over list elements:
1 2 3 4 5 6
Splicing list
Spliced elements: 2 3 4
复杂列表
复杂列表是包含异构元素的列表。
print("complex", 10, 20, "list");
输出:
complex1020list
扁平列表
如果存在嵌套列表,它将被合并成一个没有任何嵌套的列表。
print(2, 3, 4, (5, 6));
print("\n");
print(2, 3, 4, 5, 6);
print("\n");
print((2, 3, 4), 5, 6);
print("\n");
输出:
23456
23456
23456
Perl 数组
数组是一种 Perl 数据结构。Perl 中的数组是一个包含列表的变量。数组变量以“@”符号作为前缀。数组在 Perl 中有广泛的应用。对可以在阵列上执行的操作类型没有限制。Perl 中的数组可以是 2D,但是列表不能是二维的。
例:
@num = (10, 20, 30);
@str = ("this", "is", "a", "list", "in", "perl");
数组操作
# declaration
@array = (10, 20, 30, 40, 50);
print("Declared array\n");
print join(' ', @array);
print("\n\n");
# accessing particular element
print("Accessing element at index 2 \n");
print(@array[2]);
print("\n\n");
# push
print("Pushing two elements in to the array\n");
## returns total no. of elements in updated array
push(@array, (60, 70));
print join(' ', @array);
print("\n\n");
# pop
print("Popping elements from array\n");
print("Popped element: ");
## returns the popped elements of the array
print(pop(@array));
print("\n");
print join(' ', @array);
print("\n\n");
# shift
print("Shift element in an array\n");
shift(@array);
print join(' ', @array);
print("\n\n");
# unshift
print("Unshift element in an array\n");
unshift(@array, 10);
print join(' ', @array);
print("\n\n");
# splicing the array
print("Splice an array\n");
print("Spliced elements: ");
print join(' ', splice @array, 3, 2 );
print("\nArray after being spliced: ");
print join(' ', @array);
print("\n\n");
# reversing the array
print("Reverse elements in an array\n");
print join(' ', reverse @array);
print("\n\n");
# loop
print("Iterate over elements in an array\n");
foreach $element (@array)
{
print("$element\t");
}
print("\n\n");
# range
print("Range function\n");
@array1 = (1..5);
print("@array1\t");
print("\n\n");
输出:
Declared array
10 20 30 40 50
Accessing element at index 2
30
Pushing two elements in to the array
10 20 30 40 50 60 70
Popping elements from array
Popped element: 70
10 20 30 40 50 60
Shift element in an array
20 30 40 50 60
Unshift element in an array
10 20 30 40 50 60
Splice an array
Spliced elements: 40 50
Array after being spliced: 10 20 30 60
Reverse elements in an array
60 30 20 10
Iterate over elements in an array
10 20 30 60
Range function
1 2 3 4 5
2D 阵列
Perl 允许创建二维数组。
@array = ( [ 10, 20, 30 ],
[ "ana", "joe", "ester" ],
[ "Welcome to gfg" ] );
for $array_ref( @array )
{
print("[ @$array_ref ], \n");
}
输出:
[ 10 20 30 ],
[ ana joe ester ],
[ Welcome to gfg ],
下表列出了阵列和列表之间的差异:
T58】Unshift
基于 | 数组 | 列表 |
---|---|---|
声明 | 一个变量引用一个列表 | 没有变量引用 |
访问元素 | 支持 | 索引支持 |
范围支持 | 范围支持 | 范围支持 |
推送支持 | 推送并在列表末尾插入新添加的元素 | 禁止推单。支持 |
Pop | Pop,从列表末尾弹出一个元素。 | 列表中禁止 Pop |
循环 | 数组元素可以使用循环 | 迭代列表元素可以使用循环 |
Shift | Shift 被支持,数组的第一个元素被移除 | Shift 在列表中禁止 |
Unshift | 列表中禁止解除移位 | |
拼接 | 阵列中支持拼接。列表中支持 | 拼接。但是,拼接列表无法访问,因为没有变量引用它。 |
反转 | 数组支持反转操作 | 列表不支持反转 |
在 Perl 中,列表和数组通常被认为是相同的。但是这两者是有区别的。虽然列表在 Perl 中不是一种数据结构,但数组是在 Perl 中引用列表的变量。在实际应用中,我们使用数组。