[#46647] RubyでWindowsの常駐サービスプログラムを作る方法 — kouichi_someya@...

はじめまして。

12 messages 2009/12/16
[#46649] Re: RubyでWindowsの常駐サービスプログラムを作る方法 — "U.Nakamura" <usa@...> 2009/12/17

こんにちは、なかむら(う)です。

[ruby-list:46627] ブロック付きの sort で元の配列が破壊される

From: "Hideo Konami" <konami@...>
Date: 2009-12-12 00:45:54 UTC
List: ruby-list #46627
小波です。

次のような現象に出会いました。これらは私の見る限りではリファレン
スの記述と矛盾していて,しかもまずいことに思えます。


まず,配列の配列に対するソートをブロック付きソートで行うと,元の
配列が破壊されて子配列の一つに置き換えられてしまいます。

~/09:24:08> ruby --version
ruby 1.8.7 (2009-06-12 patchlevel 174) [i686-darwin9.8.0]

~/09:24:14> irb
irb(main):001:0> a = [[1,6],[2,5],[3,4]]
=> [[1, 6], [2, 5], [3, 4]]
irb(main):002:0> a.sort
=> [[1, 6], [2, 5], [3, 4]]
irb(main):003:0> a.sort{|a,b|a[1]<=>b[1]}
=> [[3, 4], [2, 5], [1, 6]]
irb(main):004:0> a
=> [2, 5]

また,sort! を使っても,ソートされた配列ではなく,同様に
子配列のひとつに置き換えられてしまいます。

irb(main):005:0> a = [[1,6],[2,5],[3,4]]
=> [[1, 6], [2, 5], [3, 4]]
irb(main):006:0> a.sort!{|a,b|a[1]<=>b[1]}
=> [[3, 4], [2, 5], [1, 6]]
irb(main):007:0> a
=> [2, 5]






In This Thread

Prev Next