[#46340] ASR 1.8.7 同梱の exerb で生成したプログラムが enumerator を見つけられない — "(株)ネットフォレスト 植田裕之" <ueda@...>
植田と申します。
10 messages
2009/09/01
[#46344] Re: ASR 1.8.7 同梱の exerb で生成したプログラムが enumerator を見つけられない
— arton <artonx@...>
2009/09/01
artonです。
[#46345] Re: ASR 1.8.7 同梱の exerb で生成したプログラムが enumerator を見つけられない
— "NARUSE, Yui" <naruse@...>
2009/09/01
成瀬です。
[#46346] Re: ASR 1.8.7 同梱の exerb で生成したプログラムが enumerator を見つけられない
— "(株)ネットフォレスト 植田裕之" <ueda@...>
2009/09/02
植田です。こんにちは。
[#46347] requireが失敗することについて — 北村寛 <kitayuta@...>
北村と申します。最近Rubyを始めた初心者です。
6 messages
2009/09/02
[#46378] 最も低コストの方法は? — 大田黒俊夫 <toshio.otaguro@...>
質問です.
8 messages
2009/09/11
[#46380] Re: 最も低コストの方法は?
— rubikitch@...
2009/09/11
From: 大田黒俊夫 <toshio.otaguro@gmail.com>
[#46386] Rubyの演習問題 — "Tetsuya Kamisawa" <kami@...2000.net>
はじめて投稿させていただきます、神沢と申します。
6 messages
2009/09/12
[#46403] moodle と連携した eラーニング教材開発について — "Hideo Konami" <konami@...>
京都女子大の小波です。
3 messages
2009/09/21
[#46408] html→csv変換|tableのセル結合に対応したものは? — YOSHIIZUMI <t-yoshiizumi@...>
吉泉といいます。
7 messages
2009/09/23
[#46410] 再送;;ruby1.8.7と1.9.2の文字処理について — eiichi_maekawa@...
6 messages
2009/09/24
[#46426] DateTime#to_time — "T.Soejima" <clev@...2.so-net.ne.jp>
相変わらず ruby 勉強中のそえじまです。
11 messages
2009/09/30
[#46427] Re: DateTime#to_time
— "NARUSE, Yui" <naruse@...>
2009/09/30
成瀬です。
[#46429] Re: DateTime#to_time
— "T.Soejima" <clev@...2.so-net.ne.jp>
2009/09/30
成瀬さん、ありがとうございます。
[ruby-list:46383] Re: 最も低コストの方法は?
From:
rubikitch@...
Date:
2009-09-12 07:32:07 UTC
List:
ruby-list #46383
From: Tetsuo Sakaguchi <saka@slis.tsukuba.ac.jp>
Subject: [ruby-list:46382] Re: 最も低コストの方法は?
Date: Sat, 12 Sep 2009 15:37:11 +0900
> all?, any? どちらもブロックを与えられるので、それを使えば
> 一発じゃないですか?
> 例えば、{ | x | x.empty? } とか。
> (参考: http://doc.okkez.net/static/187/class/Enumerable.html)
その通りです。
しかし、Rubyのブロックはコストがでかいです。
全要素が nil であるかどうかを判定するのにブロックを使う場合と使わない場合を比較してみます。
高速化したければ、適切なアルゴリズム(メソッド)とデータ構造(nilが使えるなら使え)を選べということです。
# -*- coding: euc-jp -*-
require 'benchmark'
Benchmark.bm(15) do |b| # 全要素がnil
# 全要素を走査するので時間がかかる
ary = Array.new(100000, nil)
ary.all? {|x| x == nil } # => true
ary.none? # => true
b.report("with block") { ary.all? {|x| x == nil } }
b.report("without block") { ary.none? }
end
Benchmark.bm(15) do |b| # 1つの要素が非nil
# 途中で処理が打ち切られる
ary = Array.new(100000, nil); ary[550] = "a"
ary.all? {|x| x == nil } # => false
ary.none? # => false
b.report("with block") { ary.all? {|x| x == nil } }
b.report("without block") { ary.none? }
end
RUBY_VERSION # => "1.9.2"
# >> user system total real
# >> with block 0.040000 0.000000 0.040000 ( 0.036237)
# >> without block 0.000000 0.000000 0.000000 ( 0.005338)
# >> user system total real
# >> with block 0.000000 0.000000 0.000000 ( 0.000228)
# >> without block 0.000000 0.000000 0.000000 ( 0.000043)
RUBY_VERSION # => "1.8.8"
# >> user system total real
# >> with block 0.110000 0.000000 0.110000 ( 0.113428)
# >> without block 0.030000 0.000000 0.030000 ( 0.027634)
# >> user system total real
# >> with block 0.000000 0.000000 0.000000 ( 0.000443)
# >> without block 0.000000 0.000000 0.000000 ( 0.000126)
--
rubikitch
Blog: http://d.hatena.ne.jp/rubikitch/
Site: http://www.rubyist.net/~rubikitch/
Twit: http://twitter.com/rubikitch/
『Ruby逆引きハンドブック』 http://d.hatena.ne.jp/rubikitch/20090525/rubybook