哈希哈希在Perl中

我有Perl的问题:输入5移动设置的详细信息(发票号码,型号,公司,内存,价格,数量)。打印所有细节,总金额(数量*价格),总数量,每家公司的手机数量。哈希哈希在Perl中

我的脚本是:

#!/usr/bin/perl

my %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}++

}

注意

  1. 这是确定删除数组键中的引号,以便您可以编写{Company}而不是{'Company'}
  2. 增加一个未定义的散列元素(它将被视为0)是可以的,所以不需要检查元素是否存在。

回答:

移动名称是您先前在foreach my $id(sort keys %mobset)循环中打印的名称,不是吗?你可以这样做另一个循环,或者你可以在这个循环中将这些名字保存在一个数组中,然后使用它。

以上是 哈希哈希在Perl中 的全部内容, 来源链接: utcz.com/qa/262859.html

回到顶部