CGIなどのの質問を受付ます。
現在SPAM対策の為、一部ホストアドレスを規制中。
▼スレッド
│
└◇6:配列説明補足なの〜ぉ〜 [とむとむ(ぷろぐらまもーど)] 10/06 15:08
└◇7:Re:配列説明補足なの〜ぉ〜 [moon] 10/07
└◇8:Re[2]:配列説明補足なの〜ぉ〜 [とむとむ] 10/09
└◇9:Re[3]:配列説明補足なの〜ぉ〜 [moon] 10/12
└◇10:Re[4]:配列説明補足なの〜ぉ〜 [とむとむ] 10/12
└◇11:Re[5]:配列説明補足なの〜ぉ〜 [moon] 10/19
└◇12:Re[6]:配列説明補足なの〜ぉ〜 [とむとむ] 10/20
└◇13:Re[7]:配列説明補足なの〜ぉ〜 [moon] 10/21 <
いろいろあるので、目的別に掲載なのぉ〜スレッド一覧
●配列に要素を追加、削除する。
shift(@xxx); # 配列の頭の変数を削除
unshift(@xxx,$xxx); # 配列の頭に変数を代入
pop(@xxx); # 配列の最後の変数を削除
push(@xxx,$xxx); # 配列の最後に変数を代入
splice(@xxx,3,4); # 配列の中の3番目から順に4個削除
$#xxx = -1; # 配列内のデータをすべて削除してクリアにする。
@XXX = (@xxx,@yyy); 配列を連結する。
●配列に入っている要素を数える
$a = scalar(@xxx); # 配列内に入ってる要素数
$b = $#xxx; # 配列の最後のインデントを取得する。
※上について補足。
@xxxに('1','2','3','4','5')と要素が入っていたときに、
上の例だと、「$a」には「5」が入り、「$b」には「4」が入る。
●配列の編集
reverse(@xxx); # 配列を逆順に並び替え
sort {$a <=> $b} @xxx; # 配列を並び替える(数値)
sort {$a cmp $b} @xxx; # 配列を並び替える(文字列)
$a = join (",",@xxx); # 配列の要素を「,」で連結する。
とまあ、よく使いそうな配列に関する関数はこれぐらいですね。
個人的には
reverse(@xxx) を使うぐらいなら、
sort{$b <=> $a} @xxx;を使った方がよいかと・・
まあケースバイケースなんですが・・・・
> ●配列の編集スレッド一覧
> reverse(@xxx); # 配列を逆順に並び替え
> sort {$a <=> $b} @xxx; # 配列を並び替える(数値)
> sort {$a cmp $b} @xxx; # 配列を並び替える(文字列)
ソートがいまいちわかんないんだよねぇ〜
sort {$a <=> $b} @xxx;
コレだと、降順に並ぶってことなのかなぁ?
いまいちわからじ。
sort {$a <=> $b} @xxx;スレッド一覧
というソート方はね、例えば配列の中が・・・
@xxx = ('5','7','3','1','9');
となっていた場合、最初の数値とその直後の数値を比べて並べ替ええるわけ、
つまり最初からいってみると、
$a = 5;
$b = 7;
となり、プログラムの順番にしたがって(早い話 $a < $b の順ね)の
通りに並び替えてくれるの。つまり、
@end_sort_xxx = ('1','3','5','7','9');
となる。反対に{$a <=> $b}と順を逆にすると、
逆順ソートが完成するわけなのさ。
例えば、適当に入っている配列数字を逆順にソートかけるとなると、
この方法知らないとプログラムは・・・
@xxx = sort @xxx;
@end_sort_xxx = reverse @xxx;
と二行になるけど、この方法だと・・・
@end_sort_xxx = sort {$b <=> $a} @xxx;
の一行ですんじゃうんだな♪
なんとなく分かった。気がする(^^;スレッド一覧
> @xxx = sort @xxx;
コレで正順のソートが出来てしまうのね。多分。
> @end_sort_xxx = sort {$b <=> $a} @xxx;
ところで、「@end_sort」という文字列に意味があるのでしょうか・・・?
> ところで、「@end_sort」という文字列に意味があるのでしょうか・・・?スレッド一覧
ただこれで最後・・・という意味でつけただけで、
特に意味は無いよん♪
複数の値が入っている配列でソートするときはどうするんだろう・・・?スレッド一覧
例えば、
@file(
'a,1,あいうえお,546',
'c,3,さしすせそ,158',
'b,2,かきくけこ,2055',
'd,4,たちつてと,33',
)
というので、二つ目でソートしたい場合とか。
うーむ。謎だ。
> @file(スレッド一覧
> 'a,1,あいうえお,546',
> 'c,3,さしすせそ,158',
> 'b,2,かきくけこ,2055',
> 'd,4,たちつてと,33',
> )
じゃなく、
@file = (
'a,1,あいうえお,546',
'c,3,さしすせそ,158',
'b,2,かきくけこ,2055',
'd,4,たちつてと,33',
)
だね♪(にこやかに)
でこの場合のソート方法はかなり厄介。なので多分これでよいだろうと思われるソース書いたので、参考にしてな
# ソートしたい要素だけを抜き出す
foreach $file(@file){
@ELEMENT = split(/,/,$file);
push (@temp,$ELEMENT[1]);
}
# 抜き出した要素でソート
sort {$a <=> $b} @temp;
# ソート順に元配列を並び替え
foreach $temp(@temp){
foreach $file(@file){
@ELEMENT = split(/,/,$file);
if ($temp eq $ELEMENT[1]){
push (@file_2,$file);
}
}
}
とやると多分、うまく行くはず。
ただ同じ配列名に格納すると無限ループになるので、注意が必要だねっ☆
うぃうぃ。さんくす。スレッド一覧
暇な時にやってみまーす。