【发布时间】:2019-09-27 17:49:22
【问题描述】:
我正在查看以下数据(JSON 格式)
{
"FValidation_pipelineMTHXT_v4.5.1_refLibV2": "concordance2/f",
"FValidation_pipelineLPJL": "concordance2/c",
"FCompetenceRuns": "concordance2/b",
"FWGS": "concordance2/a",
"Falidation_pipelineMTHXT": "concordance2/e",
"FValidation_pipelineLPJL_v4.5.1_refLibV2": "concordance2/d"
}
我正在尝试按哈希值排序
for %files.kv -> $key, $value {
提供所需的数据,但我希望它排序。我尝试了大约 20 种不同的方法,但都不起作用
for %files.sort.kv -> ($key, $value) {
和
for %files.sort: *.value.kv -> ($key, $value) {
灵感来自https://docs.perl6.org/routine/sort#(Map)_method_sort 并不断,但没有一个工作:(
如何按值对这个哈希进行排序?
【问题讨论】:
-
@raiph
sort(*.value)返回一个序列,因此.kv将返回$index, $element而不是$element-key, $element-value。您可以尝试将其转回哈希,例如sort(*.value).hash.kv但随后哈希随机化会丢失排序。 -
@ugexe 谢谢。我已经删除了我的虚假评论。所以你的答案是正确的。
sort返回Seq。如果调用者是散列,则Seq元素为Pairs。然后一个块可以使用.key和.value。简单的!经验教训:1 我还是没能学到“Always test code, no exceptions”包含always这两个词 和 没有例外。 2 散列以随机顺序存储其密钥——“排序散列”是矛盾的。改为考虑“排序对”。 3sort不返回其调用者的排序版本。它以某种排序顺序返回该调用者的元素的Seq。
标签: sorting hashmap comparator raku columnsorting