gpt4 book ai didi

perl - Perl 中存储表格数据的最佳数据结构是什么?

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

我有一个包含以下数据的表

1.1.1.1   routerA  texas
2.2.2.2 routerB texas
3.3.3.3 routerC california

Perl 中存储这些数据的最佳数据结构是什么?我正在考虑以 IP 地址作为 key 存储在散列的散列中
1.1.1.1 
routerA => texas,
2.2.2.2
routerB => texas,
3.3.3.3
routerC => california

但是如果我想获取德克萨斯州的所有IP地址,我的数据结构可能不够灵活。如果我关心德克萨斯州的所有 IP 地址,有没有更好的方法来存储它?

最佳答案

Pure Perl 绝对可以胜任这项任务。

将表视为一组记录。在 Perl 中,这是一个散列引用数组。 (AoA 有时可能适用,请记住 TIMTOWTDI)

每个散列引用的键对应于列/字段名称,值将是该特定记录的值。

将 OP 的示例转换为数据结构:

my @data = (
{
ip => '1.1.1.1',
router => 'routerA',
state => 'texas',
},
{
ip => '2.2.2.2',
router => 'routerB',
state => 'texas',
},
{
ip => '3.3.3.3',
router => 'routerA',
state => 'california',
}
);

现在是有趣的部分:
# Give me all IPs in Texas

my @ips_in_texas = map $_->{ip},
grep { $_->{state} =~ /texas/i }
@data;

# How many states does the data cover?

use List::MoreUtils 'uniq';

my $states_covered = uniq( map $_->{state}, @data );

# How many unique IPs in each state?

my %ips_by_state;
$ips_by_state{ $_->{state} }{ $_->{ip} }++ for @data;
print "'$_': ", scalar keys %{ $ips_by_state{$_} }, "\n" for keys %ips_by_state;

当我建议这个数据结构以它对内存的渴望为中心时,我经常得到下意识的 react 。坦率地说,除非您处理数百万条记录,否则这不会成为问题。如果是这种情况,DBMS 是您寻求的铅笔锐化解决方案,而不是 Perl。

关于perl - Perl 中存储表格数据的最佳数据结构是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10884015/

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