我想我可以按照下面的方式来做。然而,当我这样排序时,输出的是十六进制值,而不是指向array @menu中“item”的字符串。我想实现的是按“item-name”排序
my @menu = (
{ item => "Blazer", price => 100, color => "Brown" },
{ item => "Jeans", price => 50, color => "Blue" },
{ item => "Shawl", price => 30, color => "Red" },
{ item => "Suit", price => 40, color => "Black" },
{ item => "Top", price => 25, color => "White" },
);
my @test = sort {item } @menu;
foreach (@test){
print $_;
}
字符串
4条答案
按热度按时间t98cgbkg1#
您的
print $_
打印每个哈希引用的字符串值,因此您将得到类似HASH(0x1d33524)
的内容。您需要打印您感兴趣的每个散列的字段。此外,您需要在
sort
块中使用正确的比较表达式。仅仅给出一个哈希键的名字不会有任何用处。字符串
输出
型
更新
如果你想要的只是一个条目字段值的排序列表,那么你可以写得更简单
型
输出
型
ncecgwcz2#
curlies的内容需要是一个表达式,该表达式返回元素
$a
是否应该出现在最终结果中的元素$b
之前。详情请参见perldoc -f sort
。由于这些元素是散列引用,并且您希望根据其中键
item
的字符串值进行排序,因此需要加载该值以进行比较字符串
x6h2sr283#
sort BLOCK LIST
的第一个参数是比较列表中两个成员的块,而不是如何提取要比较的内容。请参阅sort。字符串
Sort::Key允许你指定“排序依据”,而不是“如何比较元素”。
型
在没有strict的代码中,字符串
"item"
用于比较元素,这并不会以任何方式改变顺序。在输出中看到的是数组成员的表示,即:散列引用。如果只想查看项目,请使用型
tyky79it4#
参见
List::UtilsBy
:字符串