2011-02-04 4 views
14

次の行は、1.8.6ではなく1.8.7では正常に動作しています。私が使用できる代替手段1.8.6Ruby 1.8.6の配列内の値のインスタンスをカウントする

x = [3,4,5,6,7,78,4,3,2,5,5,3] 
x.count(3) 
=> 3 

countはバージョン1.8.6のArrayのメソッドではないので、このエラーが発生しています。このバージョンにも同様の方法がありますか?

一般的なヒントとして

答えて

9

は:1_8ブランチのルビー1.8.7、1.8.8(すなわち、先端の新機能の多くを実装しようとすると本当にクールなbackports library by Marc-André Lafortuneがあり、 Subversionリポジトリで)、1.9.1と1.9.2の標準ライブラリ、そして1.8-1.9互換の純粋なRubyで可能な限りActiveSupportのいくつかの選択メソッドを提供しています。

ので、あなただけの

require 'backports' 

をすれば、それはCに落とすか、壊すことなく可能であるとして、Rubyの1.9.2に近くにあなたのRuby 1.8.6、1.8.7または1.9.1をオンにします下位互換性。

免責事項:とにかく私は古いバージョンのRubyを使用しているという点は見当たらないので、実際には使用していません。

+1

FYIでは、特定のバックポート(この場合は 'require 'backports/1.8.7/enumerable /カウント ") –

11
count = x.select {|e| e == 3}.size 
+1

誰かがもっと記憶に残っている場合、 'find_all'は' select'のエイリアスです。あるいは 'select'は' find_all'のエイリアスです。いずれにしても、どちらもうまく機能します。 – Telemachus

+0

私はいつもGroovyのselectとfindAllを混同していました。したがって、複数の動的言語を使用する場合、1つに固執してみてください:) – Geo

20
x = [3,4,5,6,7,78,4,3,2,5,5,3] 
x.grep(3).size 
#=> 3 
+0

クリーナー..ありがとう – bragboy

関連する問題