perl - 如何对 Data::Printer 的输出进行排序?
问题描述
我正在尝试对Data::Printer的输出进行排序并且没有运气。我想按值按数字排序,而不是按字母顺序按键(这是默认值)。
灵感来自How do you sort the output of Data::Dumper? 我猜 Data::Printer 的sort_methods
工作方式类似于 Data::Dumper 的Sortkeys
:
#!/usr/bin/env perl
use strict;
use warnings FATAL => 'all';
use autodie ':default';
use DDP {output => 'STDOUT', show_memsize => 1};
my %h = (
'a' => 0,
'b' => 7,
'c' => 5
);
p %h, sort_methods => sub { sort {$_[0]->{$b} <=> $_[0]->{$a}} keys %{$_[0]} };
但这打印出来
{
a 0,
b 7,
c 5
} (425B)
但顺序应该是b
, c
, 然后a
。奇怪的是,没有错误消息。
如何按哈希值对 Data::Printer 的输出进行数字排序?
解决方案
您没有倾倒对象,因此sort_methods
不适用。如果是这样,“此选项将按字母顺序排列它们”。
哈希有一个sort_keys
选项,但它决定了“打印哈希内容时是否对键进行排序”。它默认为1
,并且没有提到设置顺序的方法。测试确认提供 sub 不提供提供排序顺序的方法。
$ perl -e'use DDP; p {a=>5}->%*, sort_keys => sub { };'
[Data::Printer] 'sort_keys' property must be a scalar, not a reference to CODE at -e line 1.
推荐阅读
- pandas - DataFrame:如何添加其值是另一列的唯一计数的列?
- dc.js - dc.js 减少错误。我需要获取在其他项目上重复(和依赖)的项目的唯一计数
- c - 如何使用 imagemagick 从 c 中的图像列表创建 gif
- python - 通过拆分行创建新的 pandas 数据框
- outlook-addin - Outlook MAPI - 无法从属性 PR_RECIPIENT_TRACKSTATUS_DELIVERY 检索数据
- javascript - 如何在 React Native 移动应用程序中集成简单的 js 文件?
- pandas - 将名称列表的列拆分为所有首字母组合
- list - 颤动如何在初始化状态下使用未来的异步方法
- reactjs - 在卡片中切换到新组件的最有效方法是什么?
- android - 如何使用 GridLayout (spanCount = 2) 使 RecyclerView 居中?