代码之家  ›  专栏  ›  技术社区  ›  joe

用于搜索记录的最佳数据结构

  •  0
  • joe  · 技术社区  · 15 年前

    我有很多ID,我想暂时存储它们,需要搜索该记录进行一些操作。在Perl中,哪个数据结构适合这个操作?我应该使用哈希或数组,还是有其他模块可以有效地执行此操作?

    记录是 4343, 34343, 34343, 2323, 232, ... .

    1 回复  |  直到 15 年前
        1
  •  3
  •   Brad Gilbert    15 年前

    更多关于您的记录布局的信息将有助于帮助人们帮助您。如果记录链接到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的次数,因此对于重复记录,$receixists将大于1,对于不存在的记录,它将等于0。要获得所有ID的数字排序列表,您可以编写

    my @sortedID = sort {$a <=> $b} keys %records;