月の省略形をPerlで数字に変換する最も簡単で効果的な方法は何ですか? (つまり“ jan” to 1)
-
04-07-2019 - |
質問
メソッドを使用するためにライブラリをインポートする場合、それは価値がありますか?インポートには多くのメモリが必要ですか?
解決
%mon2num = qw(
jan 1 feb 2 mar 3 apr 4 may 5 jun 6
jul 7 aug 8 sep 9 oct 10 nov 11 dec 12
);
および取得する
$mon2num{"jan"}
他のヒント
これを行うもう1つの方法を次に示します。
my %month; @month{qw/jan feb mar apr may jun
jul aug sep oct nov dec/} = (1 .. 12);
このようなモジュールをインポートしても、それを控えるべきほど多くのメモリを消費する可能性はありませんが、この場合はおそらく単純なハッシュでも同じくらい良いでしょう。次のようなもの
my %number_for = (
jan => 1,
feb => 2,
#etc...
);
#...
do_something_with($number_for{$month})
my %month_num = do { my $i = 1; map {; my %month_num;
$month_num{ my %month_num = do { my $i = 1; map {; my %month_num = do {
my @month = qw( jan feb mar apr may jun jul aug sep oct nov dec );
zip2( 1 .. 1+$#month, @month );
};
または多分:
<*>
または zip関数を使用:
<*> => $i++ } (
qw( jan feb mar apr may jun jul aug sep oct nov dec )
) };
または多分:
<*>
または zip関数を使用:
<*> } = 1 + keys %month_num for (
qw( jan feb mar apr may jun jul aug sep oct nov dec )
);
または多分:
<*>
または zip関数を使用:
<*> => $i++ } (
qw( jan feb mar apr may jun jul aug sep oct nov dec )
) };
または多分:
<*>または zip関数を使用:
<*>うーん-これを行うには、非常に複雑な方法がたくさんあるようです。何かをするには、この単純な明快さが重要です:
# create a lookup table of month abbreviations to month numbers
my %month_abbr_to_number_lkup = (
jan => 1,
feb => 2,
mar => 3,
apr => 4,
may => 5,
jun => 6,
jul => 7,
aug => 8,
sep => 9,
oct => 10,
nov => 11,
dec => 12,
);
# get the number for a month
my $number = $month_abbr_to_number_lkup{$abbr}
|| die "Could not convert month abbreviation '$abbr' to a number.";
また、ハッシュキーでは大文字と小文字が区別されることに注意してください。略語がどこから来ているかに応じて、ハッシュキーと一致するように、最初にそれらを小文字にすることができます。
%mon_2_num = (jan => 1,
feb => 2,
...);
$month_number = $mon_2_num{lc($month_name_abbrev)};
ハッシュスライスを使用してこれを行う別の方法:
@month{qw(jan feb mar apr may jun jul aug sep oct nov dec)} = 1..12;
実行する予定の日付操作の量に依存します。最初は、おそらく手動でロールする方が良いでしょう。例えば、
my @months = qw(Jan Feb Mar Apr May Jun
Jul Aug Sep Oct Nov Dec);
my %monthnum = map { 実行する予定の日付操作の量に依存します。最初は、おそらく手動でロールする方が良いでしょう。例えば、
<*>
(あなたがしていることは比較的明らかなので、このアプローチが好きです-月のリストがあり、1..12(人間にとって意味のある数字)から0..11(コードのパフォーマンスのボトルネックは、この種のコードではなく、ネットワーク、データベース、またはディスクアクセスコードにあるため、コードを読みやすくすることに集中してください。 )
コードへの追加を開始すると、このような処理の多くが既存のモジュールによって既に実行されていることがわかります。たとえば、次のような単純な処理を簡単に実行できる場合があります。 Date :: Calc。または、ニーズに合った日付/時刻モジュールを見つけることができます。それはこの質問の範囲を超えています。
一部のモジュールは自動分割を使用していることにも注意してください。モジュールの必要な部分のみがロードされます。また、大きなモジュールを使用した場合の主なパフォーマンスへの影響は必ずしもRAMではありません。おそらく、コードが実行される前にロードしてコンパイルする時間/ CPUオーバーヘッドになる可能性が高くなります。
=> $months[ 実行する予定の日付操作の量に依存します。最初は、おそらく手動でロールする方が良いでしょう。例えば、
<*>
(あなたがしていることは比較的明らかなので、このアプローチが好きです-月のリストがあり、1..12(人間にとって意味のある数字)から0..11(コードのパフォーマンスのボトルネックは、この種のコードではなく、ネットワーク、データベース、またはディスクアクセスコードにあるため、コードを読みやすくすることに集中してください。 )
コードへの追加を開始すると、このような処理の多くが既存のモジュールによって既に実行されていることがわかります。たとえば、次のような単純な処理を簡単に実行できる場合があります。 Date :: Calc。または、ニーズに合った日付/時刻モジュールを見つけることができます。それはこの質問の範囲を超えています。
一部のモジュールは自動分割を使用していることにも注意してください。モジュールの必要な部分のみがロードされます。また、大きなモジュールを使用した場合の主なパフォーマンスへの影響は必ずしもRAMではありません。おそらく、コードが実行される前にロードしてコンパイルする時間/ CPUオーバーヘッドになる可能性が高くなります。
- 1 ] } 1..12;
(あなたがしていることは比較的明らかなので、このアプローチが好きです-月のリストがあり、1..12(人間にとって意味のある数字)から0..11(コードのパフォーマンスのボトルネックは、この種のコードではなく、ネットワーク、データベース、またはディスクアクセスコードにあるため、コードを読みやすくすることに集中してください。 )
コードへの追加を開始すると、このような処理の多くが既存のモジュールによって既に実行されていることがわかります。たとえば、次のような単純な処理を簡単に実行できる場合があります。 Date :: Calc。または、ニーズに合った日付/時刻モジュールを見つけることができます。それはこの質問の範囲を超えています。
一部のモジュールは自動分割を使用していることにも注意してください。モジュールの必要な部分のみがロードされます。また、大きなモジュールを使用した場合の主なパフォーマンスへの影響は必ずしもRAMではありません。おそらく、コードが実行される前にロードしてコンパイルする時間/ CPUオーバーヘッドになる可能性が高くなります。
間違いなく他の人が提案したハッシュ。