配列の要素のサイズで配列をソートしようとしています。アイテムは、パターンx/y[.../z]
に従っています。アイテムの数量に応じてソートします。例えば。 1/2
には、/
で分割した後に2つの項目があり、12/365/85
には3つあります。私はこのような一見単純なスニペットで間違っていることを理解しているようには見えません。分割のサイズで配列を並べ替える
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my @dummy_arr = ['12345/3/365/45/12', '1/2', '3/2', '1/2/3', '2/3/4'];
@dummy_arr = sort { scalar (split /\//, $a) < scalar (split /\//, $b) } @dummy_arr;
print Dumper(\@dummy_arr);
出力:
$VAR1 = [
[
'12345/3/365/45/12',
'1/2',
'3/2',
'1/2/3',
'2/3/4'
]
];
予想される出力:
$VAR1 = [
'1/2',
'3/2',
'1/2/3',
'2/3/4',
'12345/3/365/45/12'
];
さらに正確に言えば、ソートラムダは< 0, 0,or >を返さなければなりません。したがって、もう一つのアプローチは '<'を '-'に置き換えることです。 – Flimzy
@Flimzyあなたは正しいです。一定。 – simbabque
D'oh!私はさまざまな言語で一日中作業しているため、異なる言語のデータ型間の構文上の違いを忘れてしまいます。 Schwartzian Transformの+1も非常に興味深い! –