perl - 如何使用 Perl 哈希存储库存?

标签 perl hash perl-data-structures

对于大学的作业,我们必须用 Perl 编写一个脚本,使我们能够管理电子商店的库存。 (给出的例子是亚马逊)。用户可以在完全基于文本的环境中下订单,并且必须在订单完成后更新库存。

库存中的每个项目都有 3 到 4 个属性:产品代码、标题、价格和一些数量(例如 MP3 没有此属性)

由于这是我第一次接触 Perl,我真的不知道如何开始。我的主要问题是我应该如何在程序中“实现”库存。该程序的功能之一是搜索标题。另一种是下订单,用户应在其中提供产品代码。

我的第一个想法是以产品代码为键的散列。但是如果我想在标题中搜索可能会因为这个而出现问题: 散列键类似于 DVD-123,属于该键的信息可以是“The Green Mask 12”(不带引号),其中 12 表示该 DVD 目前有多少库存。所以最后我必须找到一种方法来忽略 12。

另一种解决方案是使用标题作为键,但我认为这也很麻烦。

有没有办法用 2 个键创建一个哈希表,当我只给出一个键时,它返回一个包含其他值的数组? (包括其他 key 和其他信息) 这样我就可以根据我需要的库存信息使用另一个 key 。

我们必须从如下所示的文本文件中读取默认 list :

MP3-72|Lady Gaga - Kiss and Run (Fear of Commitment Monster)|0.99  
CD-400|Kings of Leon - Only By The Night|14.50|2  
MP3-401|Kings of Leon - Closer|0.85  
DVD-144|Live Free or Die Hard|14.99|2  
SOFT-864|Windows Vista|49.95  

最佳答案

由于您的类(class)可能不涉及 SQL 或数据库,您可能会发现将库存表示为 hash of hashes 很有用。 .

库存元素将被散列引用:

my $die_hard_4 = { code => 'DVD-144', title => 'Live Free or Die Hard', price => 14.99, stock => 2 };

您的库存本身将是一个哈希:

my %inventory;
$inventory{'DVD-144'} = $die_hard_4;

您可以创建另一个散列来按标题为您的库存编制索引:

my %inventory_by_title;
$inventory_by_title{'Live Free or Die Hard'} = $die_hard_4;

剩下的就是将 list 文件格式解析为像上面那样的哈希引用。举个简单的例子:

my %inventory;
my %inventory_by_title;

while ( <> ) {   # for each line of input
    chomp;  # remove trailing newline
    my ($code, $title, $price, $amount) = split /\|/;  # split by '|' character
    my $item = {
        code => $code,
        title => $title,
        price => $price,
        stock => $amount,
    };
    $inventory{$code} = $item;
    $inventory_by_title{$title} = $item;
}

希望这可以帮助您入门。

关于perl - 如何使用 Perl 哈希存储库存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2482995/

相关文章:

regex - 如何用动态字符串替换字符串

perl - 使用 perl 编写的 gui 应用程序的身份验证

javascript - JavaScript 对象中键查找的性能

c++ - 我如何计算此哈希函数中的冲突?

arrays - 如何在 Perl 中创建一个哈希数组并遍历它们?

perl - 在 Perl 中使用 map 仅在键存在时进行映射

perl - 美元符号应该围绕实体和值 - Perl

regex - 识别在字符串中查找匹配项时使用 Perl 正则表达式的哪一部分

python - 哈希在python中做了什么?

perl - 具有数组值的哈希的哈希