ホームページ  >  記事  >  バックエンド開発  >  Perlで混合文字列をソートするにはどうすればよいですか? (コード例)

Perlで混合文字列をソートするにはどうすればよいですか? (コード例)

青灯夜游
青灯夜游オリジナル
2019-04-16 11:40:233048ブラウズ

Perl での並べ替えは、事前定義された関数「sort」を使用して実行できます。この関数は、クイックソート アルゴリズムを使用して、渡された配列を並べ替えます。次の記事では、sort() 関数を使用して、混合形式の文字列 (つまり、英数字の文字列) を含む配列をさまざまな方法で並べ替える方法を紹介します。 [ビデオチュートリアルの推奨: Perl チュートリアル]

Perlで混合文字列をソートするにはどうすればよいですか? (コード例)

方法 1: sort() substr() 関数

数値を使用して文字列を比較するには、文字列から数値を取得することが非常に重要です。これらの数値に基づいて文字列配列を並べ替えることができます。

substr() 関数を使用すると、文字列からこれらの数値を抽出できます。この関数は、文字列内の数字を除いた文字数を引数として受け取ります。

注: 配列内のすべての英数字文字列は同じサイズである必要があります。

例:

use strict; 
use 5.010; 
  
# 用字母数字字符串定义数组值
my @x = qw(prin_4 Keys_8 pubg_12); 
print "原数组:\n";
print join " , ", @x;  
# 使用sort()和substr()函数对数组进行排序 
my @y = sort { substr($a, 5) <=> substr($b, 5) } @x; 
  
# 输出排序的数组
print "\n\n排序的数组:\n";
print join " , ", @y;

出力:

原数组:
prin_4 , Keys_8 , pubg_12

排序的数组:
prin_4 , Keys_8 , pubg_12

方法 2: sort() 正規表現

英数字の文字列が少し複雑な場合、上記のコードを実行するのは難しいため、正規表現を使用して簡単にすることができます。

例: 配列に「Keys_8_keys」が含まれている場合、このケースを処理するのは難しいため、文字列内の数値を正しくフィルターするには、正規表現を使用できます。

注: このメソッドでは、英数字文字列のサイズが異なるかどうかは関係ありません。

例:

use strict; 
use 5.010; 
  
# Sample string to extract  
# number from 
my $str = &#39;Key_8_key&#39;; 
  
# Regular expression to extract the number 
my ($number) = $str =~ /(\d+)/; 
  
# 输出提取的数字
print "从Key_8_key中提取的数字是:$number\n"; 
  
# 用字母数字字符串定义数组
my @x = qw(pri_4 Key_8_key pubg_12); 
  
# 排序前的数组
print "\n排序前的数组:\n"; 
print join " , ", sort @x; 
  
# 使用正则表达式
my @y = sort { ($a =~ /(\d+)/)[0] <=> ($b =~ /(\d+)/)[0] } @x; 
  
# 排序后数组
print "\n\n排序后数组\n"; 
print join " , ", @y;

出力:

从Key_8_key中提取的数字是:8
排序前的数组:
Key_8_key , pri_4 , pubg_12
排序后数组
pri_4 , Key_8_key , pubg_12

注: 配列に数値が含まれていない文字列が含まれている場合、この数値の代わりに 0 を使用できます。文字列に数字が含まれていないことを確認するには、次のコードを使用します。

my @y = sort { (($a =~ /(\d+)/)[0] || 0)  (($b =~ /(\d+)/)[0] || 0) } @x;

Example:

#!/usr/bin/perl 
use strict; 
use 5.010; 
  
# 混合类型字符串的数组
my @x = qw(pri_4 Key pubg_12); 
  
# 使用正则表达式
my @y = sort { (($a =~ /(\d+)/)[0] || 0) <=>  
               (($b =~ /(\d+)/)[0] || 0) } @x; 
   
# 输出排序的数组
print "排序后数组:\n"; 
print join " , ", @y;

Output:

排序后数组:
Key , pri_4 , pubg_12

上記は、この記事の内容全体です。 、皆さんの勉強のお役に立てれば幸いです。さらにエキサイティングなコンテンツについては、PHP 中国語 Web サイトの関連チュートリアルのコラムに注目してください。 ! !

以上がPerlで混合文字列をソートするにはどうすればよいですか? (コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。