好的,不知道在哪里问这个,但我是初学程序员,使用Perl。我需要创建一个数组的数组,但我不确定是否更好地使用数组/哈希引用,哈希数组或哈希数组等。
我需要一系列匹配项:@totalmatches
每个匹配包含6个元素(字符串):
@matches = ($chapternumber, $sentencenumber, $sentence, $grammar_relation, $argument1, $argument2)
我需要将每个元素推送到@matches
数组/散列/引用中,然后将该数组/散列/引用推送到@totalmatches
数组中。
根据搜索文件并根据符合条件选择字符串,找到匹配项。
问题
您会使用哪种数据结构?
您可以将数组推入另一个数组,就像将元素推入数组一样吗?这是一种有效的方法吗?
您可以同时推送所有6个元素,还是必须进行6次单独推送?
使用2-D时,要使用:
foreach(@totalmatches){ foreach(@matches){ ... } }
感谢您的任何建议。
答案 0 :(得分:6)
您将使用哪种数据结构?
有序集合的数组。一组命名事物的哈希。
您可以将数组推入另一个数组,就像将元素推入数组一样吗?这是一种有效的方法吗?
如果你试图将一个数组(1)推入一个数组(2),你最终会将1的所有元素推入2.这就是为什么你要推送一个数组ref。
你可以同时推动所有6个元素,还是必须进行6次单独推送?
查看perldoc -f push
push ARRAY,LIST
您可以推送一系列内容。
使用2-D时,要使用:
嵌套的foreach很好,但是这种语法不起作用。您必须访问正在处理的值。
for my $arrayref (@outer) {
for my $item (@$arrayref) {
$item ...
}
}
答案 1 :(得分:3)
不要将一个数组推入另一个数组。 列表只是相互加入一个新列表。
使用参考列表。
#create an anonymous hash ref for each match
$one_match_ref = {
chapternumber => $chapternumber_value,
sentencenumber => $sentencenumber_value,
sentence => $sentence_value,
grammar_relation => $grammar_relation_value,
arg1 => $argument1,
arg2 => $argument2
};
# add the reference of match into array.
push @all_matches, $one_match_ref;
# list of keys of interest
@keys = qw(chapternumber sentencenumber sentence grammer_relation arg1 arg2);
# walk through all the matches.
foreach $ref (@all_matches) {
foreach $key (@keys) {
$val = $$ref{$key};
}
# or pick up some specific keys
my $arg1 = $$ref{arg1};
}
答案 2 :(得分:2)
您将使用哪种数据结构?
一个数组......我无法证明这个选择是正确的,但我无法想象如果你使用哈希,你会用什么作为键。
您可以将数组推入另一个数组,就像将元素推入数组一样吗?这是一种有效的方法吗?
这就是事情;在Perl中,数组只能包含标量变量 - 以$
开头的变量。有点像...
@matrix = ();
@row = ();
$arr[0] = @row; # FAIL!
......不会工作。您将不得不使用对数组的引用:
@matrix = ();
@row = ();
$arr[0] = \@row;
或同样地:
push(@matrix, \@row);
你可以同时推动所有6个元素,还是必须进行6次单独推送?
如果你使用引用,你只需要推送一次......因为你不想连接数组(你需要一个数组数组),你就没有其他选择;)
使用2-D时,要使用:
我会使用类似的东西:
for($i=0; $i<@matrix; $i++) {
@row = @{$matrix[$i]}; # de-reference
for($j=0; $j<@row; $j++) {
print "| "$row[$j];
}
print "|\n";
}
答案 3 :(得分:2)
Which data structure would you use?
一些基本的容器属性:
数组是有序标量的容器。
哈希是通过唯一键获取的标量的容器(哈希中可能没有重复的键)。之后添加的值的顺序不再可用。
我会使用像ZhangChn提出的相同结构。
为每场比赛使用哈希值。
然后可以通过描述性名称而不是简单的数字索引来访问匹配的细节。即$ref->{'chapternumber'}
而不是$matches[0]
。
引用这些匿名哈希(它们是标量)并将它们推入数组以保持匹配的顺序。
取消引用数据结构中的项目
从数组中获取一个哈希引用项
从哈希引用