[過去ログ]
Perlについての質問箱 64箱目 (1002レス)
Perlについての質問箱 64箱目 http://mevius.5ch.net/test/read.cgi/tech/1548981877/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
847: デフォルトの名無しさん [sage] 2020/12/09(水) 14:32:22.15 ID:LWKBPFtb >>845 Perlの「全ての処理系」て。w http://mevius.5ch.net/test/read.cgi/tech/1548981877/847
848: デフォルトの名無しさん [sage] 2020/12/09(水) 15:17:55.01 ID:UMU4oc+t そもそも重いかどうかが疑問で、どっちでやっても一瞬で終わるのが普通 それなら読みやすい方が優れている 重くて困ってから対策を考えればいい http://mevius.5ch.net/test/read.cgi/tech/1548981877/848
849: デフォルトの名無しさん [sage] 2020/12/09(水) 16:44:07.55 ID:qaSCdqDS map { $_->[0]; } sort { $a->[1] <=> $b->[1] || $a->[2] <=> $b->[2]; } map { [$_, /(\d+)/g ]; } 読みにくい…かなあ? http://mevius.5ch.net/test/read.cgi/tech/1548981877/849
850: デフォルトの名無しさん [sage] 2020/12/09(水) 17:06:18.35 ID:8NKLSi5o >>849 他の言語の人が見たら発狂しそう http://mevius.5ch.net/test/read.cgi/tech/1548981877/850
851: デフォルトの名無しさん [sage] 2020/12/09(水) 18:15:36.35 ID:UMU4oc+t 別に短く書かなくていいんだよ @r = sort s2 @a; sub s1 { my $str = shift; $str =~ /(\d+)\-(\d+)/; return $1 * 100 + $2; } sub s2 { return s1($a) <=> s1($b); } http://mevius.5ch.net/test/read.cgi/tech/1548981877/851
852: デフォルトの名無しさん [sage] 2020/12/09(水) 18:16:58.18 ID:xAMitlRd 発狂しない人が使えば良いよ http://mevius.5ch.net/test/read.cgi/tech/1548981877/852
853: デフォルトの名無しさん [sage] 2020/12/09(水) 19:43:12.41 ID:LWKBPFtb >>848 おまえ、ハードな処理を実装したことがないやろ?w 慣れたPerl使いはわざわざ>>851みたいなコードは書かない。 遅いし、くどくて逆に読みにくいからな。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/853
854: デフォルトの名無しさん [sage] 2020/12/09(水) 19:45:15.15 ID:LWKBPFtb >>850 C#でも、タプルが使えるようになったので、似たようなコードは書く。 LINQなぶんだけPerlより読みやすいけど。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/854
855: デフォルトの名無しさん [sage] 2020/12/09(水) 22:17:09.12 ID:rsuX7ND7 ハッシュテーブルにs1($val)の戻り値を保存して、そのハッシュテーブルを使って比較関数を呼び出すとかするのが普通でしょ。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/855
856: 849 [sage] 2020/12/10(木) 06:03:00.77 ID:+FxPMgzN 読みやすい優れたコードが >>851 か。 自分のコードを出してくれた点は評価するが $1 * 100 + $2 って何? http://mevius.5ch.net/test/read.cgi/tech/1548981877/856
857: デフォルトの名無しさん [sage] 2020/12/10(木) 16:08:39.86 ID:smJEm1Fb 2桁前提なんだろうな http://mevius.5ch.net/test/read.cgi/tech/1548981877/857
858: デフォルトの名無しさん [sage] 2020/12/10(木) 19:59:40.99 ID:g17Qy/zb >>857 >>834なら4桁までイケる。w http://mevius.5ch.net/test/read.cgi/tech/1548981877/858
859: デフォルトの名無しさん [sage] 2020/12/11(金) 03:24:48.11 ID:lklp228q 考え方は同じだけど最初からソート用の値をデータに持たせてみる。 my %x = ( '3-1' => ['e', 301], '1-2' => ['b', 102], .... , ); sort { $x{$a}[1] <=> $x{$b}[1] } keys %x; http://mevius.5ch.net/test/read.cgi/tech/1548981877/859
860: デフォルトの名無しさん [sage] 2020/12/11(金) 03:42:00.36 ID:Hz2bdcAQ 複数キーでのソートに帰着させるべきなんだろうな 1-1-1 も許容する、とかになった瞬間に破綻する http://mevius.5ch.net/test/read.cgi/tech/1548981877/860
861: デフォルトの名無しさん [sage] 2020/12/11(金) 04:01:52.35 ID:Hz2bdcAQ sub s1 { my @a = split /\-/, $a; my @b = split /\-/, $b; my $dim = @a > @b ? @a : @b; for my $i (0 .. $dim) { my $cmp = $a[$i] <=> $b[$i]; return $cmp if $cmp; } return 0; } http://mevius.5ch.net/test/read.cgi/tech/1548981877/861
862: 856 [sage] 2020/12/11(金) 06:10:31.03 ID:LwDR4/oY >> 833 には数値の値域については何も書かれてないんだから 勝手に想定しない方がいいと想うよ。 どうしても比較を簡略化したいなら pack 関数で数値を全部 ビッグエンディアンで並べればいいんじゃないかな。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/862
863: デフォルトの名無しさん [sage] 2020/12/11(金) 10:41:01.46 ID:vQm1aiEb >>860 最初から想定されてるのでなければ、ひどい仕様変更なんだから、実装変更もやむなしやろ。 数字じゃなくてアルファベットにします、と言われただけでパーやし。w http://mevius.5ch.net/test/read.cgi/tech/1548981877/863
864: デフォルトの名無しさん [sage] 2020/12/11(金) 10:50:54.59 ID:vQm1aiEb >>862 勝手に想定するのもあたりまえ。 じゃないと、なんにも例示できなくなるで? 値域がどうこうなんか、自分でなんとでもすればいいだけ。 本題のソートには関係ない。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/864
865: デフォルトの名無しさん [sage] 2020/12/11(金) 11:20:18.13 ID:Hz2bdcAQ 1-1があるなら1-1-1もあると予測するのは自然な拡張 1-1-1-... に無限に対応できるように作っておいて、 その特殊ケースとして要件を満たす、で十分 アルファベットにも対応するのは次元が違う http://mevius.5ch.net/test/read.cgi/tech/1548981877/865
866: デフォルトの名無しさん [sage] 2020/12/11(金) 19:40:49.33 ID:V1LdBVWq >>864 こういうひとがコーディングすると バッブァオーバーランとか起こしてセキュリティに穴を開けるんだな http://mevius.5ch.net/test/read.cgi/tech/1548981877/866
867: デフォルトの名無しさん [sage] 2020/12/11(金) 20:46:31.45 ID:vQm1aiEb >>866 アホなの? 他人のコードのバッファオーバーランなんか知らんわ。 自分で責任を持て。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/867
868: デフォルトの名無しさん [sage] 2020/12/11(金) 21:01:49.19 ID:jm3zE7RU 普段は過疎ってるのに少し書き込みがあるとクソ雑魚が湧いてきてグズグズ文句たれる 頭の中どうなってんだろうな http://mevius.5ch.net/test/read.cgi/tech/1548981877/868
869: デフォルトの名無しさん [sage] 2020/12/11(金) 22:34:31.89 ID:Hz2bdcAQ んでんでんで http://mevius.5ch.net/test/read.cgi/tech/1548981877/869
870: デフォルトの名無しさん [sage] 2020/12/11(金) 22:41:46.66 ID:pFqzegRi >>837 だが、実は、このコードは、オレが実際に、数字とかアルファベットとかが 複雑に絡んだ文字列を、ある規則に従ってソートするために作ったものを 流用したんだ。だから、応用範囲が広いという点では、これがいいと思うけどな。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/870
871: デフォルトの名無しさん [sage] 2020/12/11(金) 22:48:30.39 ID:Hz2bdcAQ sortの関数って@_で受けれるの? http://mevius.5ch.net/test/read.cgi/tech/1548981877/871
872: デフォルトの名無しさん [sage] 2020/12/11(金) 23:30:45.59 ID:vQm1aiEb >>870 にしたって、超激遅やで? 要素数が充分に少なきゃええけど。 http://mevius.5ch.net/test/read.cgi/tech/1548981877/872
873: デフォルトの名無しさん [sage] 2020/12/11(金) 23:38:00.26 ID:Hz2bdcAQ どう見ても章のタイトルとかそんなんなので、1000も無いよ 高速化の工夫は遅くて困ってから http://mevius.5ch.net/test/read.cgi/tech/1548981877/873
874: 532 [sage] 2020/12/12(土) 00:28:14.42 ID:tTwN9OuS >>833 perlのsort()アルゴリズムは5,8以降マージソートになってsort結果は安定なアルゴリズムなので 手短にコードを書くなら右の数字でsortしてから左の数字でsortすれば所望の結果が得られる。以下サンプル実装 use List::Util 'shuffle'; %h = map{$_ => $i++} shuffle qw{1-1 1-2 1-3 2-1 2-2 2-3 3-1 3-2 3-3}; use feature qw{say signatures}; no warnings experimental; @k1 = keys %h; say "@k1"; sub f($s) { [$s =~ /(\d+)/g, $s]}; @k2 = map{$$_[2]} sort{$a->[0] <=> $b->[0]} sort{$a->[1] <=> $b->[1]} map{f $_} @k1; say "@k2"; 実行結果 ~ $ perl 64_833_n-n_sort_1.pl 1-1 2-3 3-3 1-2 3-1 2-2 2-1 1-3 3-2 1-1 1-2 1-3 2-1 2-2 2-3 3-1 3-2 3-3 言語処理系内部のsort()関数のアルゴリズムに依存しない書き方がしたいなら 左と右の数値で二段階のソートをするか、右の数字と左の数値で順位に一貫性のあるキーを作って 一段階のソートで済ませる方法もあると思う。 そういったサンプル実装を見たいのであれば、時間があればくけれども… http://mevius.5ch.net/test/read.cgi/tech/1548981877/874
875: 532 [sage] 2020/12/12(土) 00:42:28.87 ID:tTwN9OuS つか、実は Tie::IxHash を使ってhashに登録したデータの順番を維持して取り出せれば いいだけの話だったりしてな。しらんけど http://mevius.5ch.net/test/read.cgi/tech/1548981877/875
876: デフォルトの名無しさん [sage] 2020/12/12(土) 00:47:36.64 ID:iq4I9JA8 >>867 アホだなあ http://mevius.5ch.net/test/read.cgi/tech/1548981877/876
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 126 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.020s