PerlとJSの比較 (配列、ハッシュ)
前回は、Perlの配列やオブジェクトの定義方法とJSの類似点・相違点を挙げました。ここでは、引き続き配列とハッシュに関する操作を追加していきます。
I. 配列
配列は、追加、削除、挿入が可能です。これらの関数がグローバルであるJSとは異なり、JSはArray.prototypeにフックされています。
1、配列の末尾に対する操作 pop(末尾の要素を削除)、push(末尾に追加)。
@goods = qw/pen pencil/;
pop(@goods); # @goods becomes (pen)
push(@goods, 'brush'); # @goods becomes (pen, brush)
Perlでは,関数呼び出しでは括弧はオプションである(文脈による)。
pop @goods; # @goods becomes pen
push @goods, 'brush'; # @goods becomes (pen, brush)
2、配列のheadに対する操作 shift(最初の要素を削除)、unshift(要素をheadに追加)。
3, 任意の位置でのスプライスの削除または挿入
4、配列の逆順、Perlにはreverse関数があるが、JSには同等のものがない。
5、ソートされた配列のソート、PerlにもJSにもあります。
2,3,4,5で紹介した関数は、デモコードとして掲載していません。
6, JSでは配列の長さを取得するためにlengthプロパティを使用しますが、Perlは異なり、3つの方法で取得することができます。
@goods = qw/pen pencil/;
# Assign an array variable to a scalar variable
$len = @goods;
# Use the scalar function
$len = scalar(@goods);
# Add 1 to the index of the last element
$len = $#goods + 1;
7, 配列を繰り返し処理する場合、Perlはforeach関数を使用します。
@goods = qw/pen pencil brush/;
# default $_
foreach (@goods) {
print "$_". "\n";
}
# Custom variables
foreach $item (@goods) {
print "$item". "\n";
}
ES5ではforEachを使用することができます
['pen', 'pencil', 'brush'].forEach(function(item) {
console.log(item)
})
ii. ハッシュ
1, キーと値を取得する
%person = (
name => 'Jack',
age => 30,
);
@k = keys %person; # (name, age)
@v = values $person; # ('Jack', 30)
ES5にはObject.keysはあるが、Object.valuesはない。
person = {
name: 'Jack',
age: 30
}
Object.keys(person) // ['name', 'age']
2, キーと値のペアの数を取得する(Perlでは簡単)
%person = (
name => 'Jack',
age => 30,
);
$len = keys %person; # 2
JSの場合、オブジェクト全体を対象とする必要がある場合があります。
function getObjLen(obj) {
var len = 0
for (var a in obj) {
if (obj.hasOwnProperty(a))
len++
}
return len
}
var person = {
name: 'Jack',
age: 30
}
getObjLen(person) // 2
3, オブジェクトを反復処理する
Perlには、while+eachとget-keys-and-foreachという2つの方法があります。
%person = (
name => 'Jack',
age => 30,
);
# way 1
while ( ($k, $v) = each %person ) {
print "$k: $v". "\n";
}
# way2
@keys = keys %person;
foreach(@keys) {
print "$_: ". $person{$_}. "\n";
}
JSはfor inで十分です。
4, キーが存在するかどうかを判断するために、Perlはexists関数を使用します。
%person = (
name => 'Jack',
age => 30,
);
if (exists $person{ndame}) {
print 'yes';
} else {
print 'no';
}
JSはin演算子を使用します。
5、deleteキー、どちらもdeleteを使うが、Perlは関数、JSは演算子
%person = (
name => 'Jack',
age => 30,
);
delete $person{'name'};
III. 配列とハッシュのスワッピング
ハッシュはPerlで簡単に配列に変換できる
%person = (
name => 'Jack',
age => 30,
);
@arr = %person; # convert hash to array becomes ('name', 'Jack', 'age', 30)
配列からハッシュへ
@nums = qw/zero 0 one 1 two 2/;
%hash = @nums;
while( ($k, $v) = each %hash ) {
print "$k: $v\n";
}
以下を印刷します。
上記のスワップはJSでネイティブにサポートされていないため、独自に実装する必要があります。
以上、PerlとJSの比較分析(配列、ハッシュ)をお伝えしましたが、参考にしていただき、より多くのスクリプトホームに対応していただければと思います。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
python urllibでのエンコード処理例
-
Perlの制御構造に関する学習ノート
-
dig と nali を使って DNS 解決アドレスが一貫しているかどうかを判断する Perl スクリプトです。
-
へのコメント Perl code for marriage proposal
-
PerlモジュールData::Dumperを使用した共有例です。
-
Perl コマンドライン引数内蔵配列 @ARGV
-
[解決済み] "デバイスに不適切なioctl"
-
[解決済み] Perlで文字列の各単語の最初の文字を大文字にするにはどうすればよいですか?
-
[解決済み] Perl で STDOUT->autoflush(1) は何をするのですか?
-
[解決済み] Perlで何か悪いことが起こったとき、croak()とdie()のどちらが良いのでしょうか?