gpt4 book ai didi

perl - 什么是双向名称 ↔ id 关系的合适数据结构?

转载 作者:行者123 更新时间:2023-12-01 13:29:01 25 4
gpt4 key购买 nike

我有一个学生姓名和他们的 ID 列表。有时我需要使用 id 搜索 name,有时我需要使用 name 搜索 id。

  • 如果使用 array[id] = name,则使用 id 查找名称很快,但使用名称查找 id 很慢。
  • 如果使用 hash{name} = id,那么使用名称查找 id 很快,但从 id 查找名称很慢。

表示学生姓名 ↔ id 关系的最佳数据结构是什么?注:学生姓名为字符串,id为从1到学生总数的连续整数。

谢谢。

最佳答案

如果您尝试在不使用实际数据库的情况下执行此操作,那么您将需要两个索引。有几种方法可以做到这一点,而且您还没有真正提供足够的信息来说明您使用它的目的,但这里有一些方法适用于许多情况:


# Store student records sequentially, in any convenient order
my @student =
( { id=27, name => 'Alice Amber', class = 'X' }
, { id=2, name => 'Bob Brown', class = 'y' }
, ...
, { id=104, name => 'Zacharia Zebra', class = 'x' }
);

# build index by id
my @student_by_id;
$student_by_id[$student[$_]{id}] = $student[$_] for 0..$#student;

# build index by name
my %student_by_name;
$student_by_name{$student[$_]{name}} = $student[$_] for 0..$#student;


What that gives you is a single copy of the student records, stored in @student in arbitrary order, and two indexes called <code>@student_by_id</code> and %student_by_name .因为索引将引用存储到学生记录中,所以通过任一索引对记录所做的任何更改都将在另一个索引中可见。当您需要更改学生的姓名或身份证号码时,唯一的障碍就会出现,因为这将需要更新受影响的索引。

关于perl - 什么是双向名称 ↔ id 关系的合适数据结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3374816/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com