トップページ⇒tech
18コメント6KB

★☆perlで「配列」したもの同士を比較するには☆★

■ このスレッドは過去ログ倉庫に格納されています
0001れいNGNG
はじめまして、れいです。Perlを勉強したばかりで、
どうしても分からないところがありまので、
だれかPerlに詳しい人がいたら教えてください。

例えば次のような、配列があり、配列2つを比較して
同じ数字がある場合には○、同じ数字が無い場合には×、
をつけるにはどうすればよいのですか。

@a=('1','3','6');
@s=('0','2','3','4');

foreach $s(@s){
foreach $a(@a){
if ($s == $a){
print "○$s";
}else{
print "×$s";
}
}
}


これだと、×0×0×0 ×2×2×2 ×3○3×3 ×4×4×4
このように表示されてしまいます。
これを、×0 ×2 ○3 ×4 というように表示したいのです。

だれか、分かる人いたら教えてくさい。(^o^)丿
0002デフォルトの名無しさんNGNG
■■■■■■■■このスレはめでたく終了しました■■■■■■■■
0003perl初心者NGNG
$max = ($#a >= $#s)? $#a: $#s;
for (0..($max - 1)){
 if ($s[$_] == $a[$_]){
  print "○$s[$_]";
 }else{
  print "×$s[$_]";
 }
}

これで動くかな。。。

↓こっちの方がいいよ
http://pc.2ch.net/php/
0004デフォルトの名無しさんNGNG
>>3
この方法だと配列のサイズが変わってしまうような。
$max-1は$maxでいいような。
0005じゃあ、こうNGNG
$min = ($#a > $#s)? $#s: $#a;
for (0..$min) {
 if ($s[$_] == $a[$_]) {
  print "○$s[$_]";
 } else {
  print "×$s[$_]";
 }
}
00064NGNG
>>5
それだと$min+1から$maxについて×が表示されないような。
配列をコピーして3のように$maxでやるか、
後で$min+1..$maxについて×を繰り返すか。

って、本質的に3で解は出てるわけでそこらへんどうでもいいですな。

ちゅうわけで終了ってことで。
0007仕様書無しさんNGNG
>>1
そんなところで、「どうしてもわからない」とか言ってる時点で、
キミはプログラマに向いてない。
あきらめなされ。
0008 ◆RubyOmS2 NGNG
>>1
Rubyを使え。

a = [1,3,6]
s = [0,2,3,4]
a & s #=> [3]

で、すぐ終わる。
上のように表示させたいなら、、

s.each do |i|
  if (a & s).include?(i)    print "○#{i} "
  else
    print "×#{i} "
  end
end

で、終了
0009 ◆RubyOmS2 NGNG
>>8
表示が崩れた、、、

s.each do |i|
  if (a & s).include?(i)
    print "○#{i} "
  else
    print "×#{i} "
  end
end

訂正終わり
0010デフォルトの名無しさんNGNG
>>1
たぶんこうやればできる。

@a=('1','3','6','a');
@s=('0','2','3','4');

@x{@a}=(1)x@a;
print map{$x{$_}?"○$_ ":"×$_ "}@s;
001110NGNG
あっ、余計なゴミがはいいてる。こうね。

@a=qw(1 3 6);
@s=qw(0 2 3 4);

@x{@a}=(1)x@a;
print map{$x{$_}?"○$_ ":"×$_ "}@s;
0012デフォルトの名無しさんNGNG
> @x{@a}=(1)x@a;

なにこれ?初めて見た。説明希望。
001310NGNG
>>12
配列@aの要素の値をキーとしたハッシュ%xを生成して、値1で初期化しています。
@x{@a} は、ハッシュのスライスです。
@x{'1', '3', '6'} と同じ動作をします。

(1)x@a は、配列@aの数分だけ値1だけからなるリストを繰り返し生成しています。
(1,1,1) と同じ動作をします。
ちなみにここでのxは繰り返し演算子です。

たぶんこう書くべきでしたね。
@y{ @a } = (1) x @a;
print map { $y{&_} ? "○$_ " : "× $_ " } @s;
001410NGNG
また、間違い発見。
>print map { $y{&_} ? "○$_ " : "× $_ " } @s;
$y{&_} 誤り
$y{$_} 正解
0015れいNGNG
結局だれもできていないジャン。
0016デフォルトの名無しさんNGNG
なんだおまえ?
001710NGNG
>>15
つうわけでこれをどうぞ。

@a=('1','3','6');
@s=('0','2','3','4');

%x = ();
foreach $a(@a){
$x{$a} = 1;
}
foreach $s(@s){
if($x{$s}==1){
print "○$s ";
}else{
print "×$s ";
}
}
0018デフォルトの名無しさんNGNG
Perl に関する話題は Webプログラミング板のほうが適しています。

Perl関連スレ@Webプログラミング板
【Perl 】初心者コーナーPart8
http://pc.2ch.net/test/read.cgi/php/1003900311/
CGIに依存しないPerlの話題一般
http://pc.2ch.net/test/read.cgi/php/991313362/

Perl関連スレ@プログラム技術板
Perlは結構使えるっぽいけどどうよ?
http://pc.2ch.net/test/read.cgi/tech/991994996/
Perl6について語れや。
http://pc.2ch.net/test/read.cgi/tech/993665608/
■ このスレッドは過去ログ倉庫に格納されています