我有很多ID,我想将它们存储为临时目的,需要搜索该记录以进行某些操作。在Perl中哪种数据结构适合这种操作?我应该使用散列还是数组,还是有其他模块可以用来有效地执行此操作?
记录为4343, 34343, 34343, 2323, 232, ...
。
答案 0 :(得分:3)
有关您的记录布局的更多信息将在帮助人们帮助您方面发挥很大作用。如果您的记录链接到id号,那么您可以使用带有'id'的哈希作为键,并将记录存储为字符串或数组引用作为哈希值
my %records;
$records{ $id_number } = "Record for $id_number";
## OR
$records{ $id_number } = ['Record', 'for', $id_number];
这将允许您查找复杂度为O(1)的id,并轻松操作相应的记录。
# Assuming the records are stored in @records
for my $record (@records) {
$recStore{$record}++;
}
# To search for a record
my $recToFind = 4343;
my $recExists = $recStore{$recToFind} || 0;
散列的键是从数据库中检索到的id,相应的值是找到id的次数,因此对于重复记录,$ recExists将大于1,对于不存在的记录,它将是等于0.要获得所有id的列表,您可以编写
my @sortedID = sort {$a <=> $b} keys %records;