. Sırala :: Doğal olarak çalışmaz, çünkü alfasayısal olmayan karakterleri yok sayar, ancak bunu yapabilecek birkaç modül vardır.
Sort::Versions
ya da tireler üzerindeki giriş böler ve non-basamaklı karakterler mevcut olup olmamasına bağlı olarak, ya alfabetik veya sayısal her grubu sıralar:
use strict;
use warnings 'all';
use 5.010;
use Sort::Versions;
my @versions = (
15.12,
16.1,
15.2,
15.1
);
say for sort { versioncmp($a, $b) } @versions;
Çıkış:
15.1
15.2
15.12
16.1
Sıralama :: Sürümler, girdinin belirli ortak sürüm dizesi formatlarıyla eşleşmesini bekler; Gösterdiğinizden farklı biçimler ayırmanız gerekiyorsa, bunun sizin için çalışacağından emin olmak için belgelerindeki kuralları kontrol edin. tüm sözcük sınırları değil, sadece dönem ve tire üzerinde böler, ancak bu durumda aynı şekilde çalışır, çünkü
Sort::Key::Natural daha esnektir:
use strict;
use warnings 'all';
use 5.010;
use Sort::Key::Natural qw(natsort);
my @versions = (
15.12,
16.1,
15.2,
15.1
);
say for natsort @versions;
(Çıktı Sıralama için aynıdır: : Sürümler)
Sıralama :: Anahtar :: Natural, sıralama düzenini özelleştirmek ve sıralamak için yeteneği gibi bazı güzel ek özelliklere sahiptir. Ayrıca, sıralamalarımdaki Sıralama :: Sürümler'den önemli ölçüde daha hızlıydı, ancak bu yalnızca büyük dizileri sıralamanızla ilgili olacak.
Bana standart kayan nokta sayıları gibi görünüyorlar. Bu sürüm dizeleri – Borodin
@Borodin'in beklenen çıktıya baktığını varsaymak için büyük bir adım. 15.12'den önce 15.2 sıralamak istiyorlar. – ThisSuitIsBlackNot
Haklısınız. Bu ince. İyi çağrı – Borodin