質問掲示板

CGIなどのの質問を受付ます。
現在SPAM対策の為、一部ホストアドレスを規制中。

新規発言一覧最新記事過去一覧 | 検索HOME

スレッド

└◇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 <


6● 配列説明補足なの〜ぉ〜[ とむとむ(ぷろぐらまもーど) ] 2001 10/06 15:08
いろいろあるので、目的別に掲載なのぉ〜

●配列に要素を追加、削除する。
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;を使った方がよいかと・・
まあケースバイケースなんですが・・・・
スレッド一覧


7● Re:配列説明補足なの〜ぉ〜[ moon ] 2001 10/07 01:33
> ●配列の編集
> reverse(@xxx); # 配列を逆順に並び替え
> sort {$a <=> $b} @xxx; # 配列を並び替える(数値)
> sort {$a cmp $b} @xxx; # 配列を並び替える(文字列)


ソートがいまいちわかんないんだよねぇ〜
sort {$a <=> $b} @xxx;
コレだと、降順に並ぶってことなのかなぁ?
いまいちわからじ。
スレッド一覧


8● Re[2]:配列説明補足なの〜ぉ〜[ とむとむ ] 2001 10/09 11:46
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;

の一行ですんじゃうんだな♪
スレッド一覧


9● Re[3]:配列説明補足なの〜ぉ〜[ moon ] 2001 10/12 13:09
なんとなく分かった。気がする(^^;

> @xxx = sort @xxx;

コレで正順のソートが出来てしまうのね。多分。


> @end_sort_xxx = sort {$b <=> $a} @xxx;

ところで、「@end_sort」という文字列に意味があるのでしょうか・・・?
スレッド一覧


10● Re[4]:配列説明補足なの〜ぉ〜[ とむとむ ] 2001 10/12 18:21
> ところで、「@end_sort」という文字列に意味があるのでしょうか・・・?

ただこれで最後・・・という意味でつけただけで、
特に意味は無いよん♪
スレッド一覧


11● Re[5]:配列説明補足なの〜ぉ〜[ moon ] 2001 10/19 03:39
複数の値が入っている配列でソートするときはどうするんだろう・・・?

例えば、
@file(
'a,1,あいうえお,546',
'c,3,さしすせそ,158',
'b,2,かきくけこ,2055',
'd,4,たちつてと,33',
)
というので、二つ目でソートしたい場合とか。
うーむ。謎だ。
スレッド一覧


12● Re[6]:配列説明補足なの〜ぉ〜[ とむとむ ] 2001 10/20 17:39
> @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);
}
}
}

とやると多分、うまく行くはず。
ただ同じ配列名に格納すると無限ループになるので、注意が必要だねっ☆
スレッド一覧


13● Re[7]:配列説明補足なの〜ぉ〜[ moon ] 2001 10/21 06:44
うぃうぃ。さんくす。
暇な時にやってみまーす。
スレッド一覧

CGIROOM