哈希哈希在Perl中
我有Perl的问题:输入5移动设置的详细信息(发票号码,型号,公司,内存,价格,数量)。打印所有细节,总金额(数量*价格),总数量,每家公司的手机数量。哈希哈希在Perl中
我的脚本是:
#!/usr/bin/perlmy %mobset = (
'1' => {
'Invoice No' =>'3456',
'Model' =>'S9900',
'Company' =>'Sonyericcson',
'Memory' =>'1GB',
'Price' =>'8000',
'Qnty' =>'1',
},
'2' => {
'Invoice No' => '3457',
'Model' => 'S3322',
'Company' => 'Samsung',
'Memory' => '2GB',
'Price' => '9000',
'Qnty' => '2',
},
'3' => {
'Invoice No' => '3458',
'Model' => 'N4140',
'Company' => 'Nokia',
'Memory' => '512MB',
'Price' => '5000',
'Qnty' => '2',
},
'4' => {
'Invoice No' => '3459',
'Model' => 'S4636',
'Company' => 'Samsung',
'Memory' => '256MB',
'Price' => '6000',
'Qnty' => '1',
},
'5' => {
'Invoice No' => '3460',
'Model' => 'S7854',
'Company' => 'Samsung',
'Memory' => '128MB',
'Price' => '7000',
'Qnty' => '1',
}
);
print "All the mobile set details are as follows:\n";
foreach my $id(sort keys %mobset) {
print "Mobile SlNo. = $id, Invoice No. = $mobset{$id}{'Invoice No'}, Model No. = $mobset{$id}{'Model'}, CompanyName = $mobset{$id}{'Company'}, Memory = $mobset{$id}{'Memory'}, Price = $mobset{$id}{'Price'}, Quantity = $mobset{$id}{'Qnty'}\n";
$totqty += $mobset{$id}{'Qnty'};
$totprice += $mobset{$id}{'Price'};
}
print "Total Quantity of mobile set is $totqty\n";
$totamt = $totqty * $totprice;
print "Total Amount of mobile set is Rs.$totamt\n";
print "The company names of mobile are:\n";
foreach my $id(sort keys %mobset) {
print "$mobset{$id}{'Company'}\n";
}
$name = SonyericcsonSamsungNokiaSamsungSamsung;
my @names = ($name =~ m/([A-Z][a-z]+)/g);
join(',',@names);
my %count;
foreach (@names) {
if (exists $count{$_}) {
$count{$_}++;
}
else {
$count{$_} = 1;
}
}
print "The number of mobiles from each company are:\n";
foreach (keys %count) {
print "$_ \t = $count{$_}\n";
}
我的输出是:
All the mobile set details are as follows: Mobile SlNo. = 1, Invoice No. = 3456, Model No. = S9900, CompanyName = Sonyericcson, Memory = 1GB, Price = 8000, Quantity = 1
Mobile SlNo. = 2, Invoice No. = 3457, Model No. = S3322, CompanyName = Samsung, Memory = 2GB, Price = 9000, Quantity = 2
Mobile SlNo. = 3, Invoice No. = 3458, Model No. = N4140, CompanyName = Nokia, Memory = 512MB, Price = 5000, Quantity = 2
Mobile SlNo. = 4, Invoice No. = 3459, Model No. = S4636, CompanyName = Samsung, Memory = 256MB, Price = 6000, Quantity = 1
Mobile SlNo. = 5, Invoice No. = 3460, Model No. = S7854, CompanyName = Samsung, Memory = 128MB, Price = 7000, Quantity = 1
Total Quantity of mobile set is 7
Total Amount of mobile set is Rs.245000
The company names of mobile are:
Sonyericcson
Samsung
Nokia
Samsung
Samsung
The number of mobiles from each company are:
Sonyericcson = 1
Nokia = 1
Samsung = 3
但我得到的O/P为手机的号码,因为我没有硬编码这我不应该移动的名称至。我如何解决代码?
回答:
确实没有必要使用硬代码。你知道这个名字 - 它在你正在散步的hasref中。只是建立一个基于公司价值的计数阵列
my %count; foreach my $id (sort keys %mobset) {
++$count{$mobset{$id}->{Company}};
}
print "The number of mobiles from each company are:\n";
foreach (keys %count) {
print "$_ \t = $count{$_}\n";
}
回答:
更改代码收集计数的片段:
my %count; foreach my $key (%mobset) {
my $name = $mobset{$key}{Company} ;
$count{$name}++ ;
}
或者,更好的,包括它前面的循环:
print "The company names of mobile are:\n"; foreach my $id(sort keys %mobset) {
my $name = $mobset{$id}{Company};
print "$name\n" ;
$count{$name}++
}
注意
- 这是确定删除数组键中的引号,以便您可以编写
{Company}
而不是{'Company'}
和 - 增加一个未定义的散列元素(它将被视为0)是可以的,所以不需要检查元素是否存在。
回答:
移动名称是您先前在foreach my $id(sort keys %mobset)
循环中打印的名称,不是吗?你可以这样做另一个循环,或者你可以在这个循环中将这些名字保存在一个数组中,然后使用它。
以上是 哈希哈希在Perl中 的全部内容, 来源链接: utcz.com/qa/262859.html