ライブラリ
- ビルトイン (430)
検索結果
先頭5件
-
Enumerable
# each _ entry -> Enumerator (12201.0) -
ブロックを各要素に一度ずつ適用します。
...配列として渡されます。
//emlist[例][ruby]{
class Foo
include Enumerable
def each
yield 1
yield 1,2
end
end
Foo.new.each_entry{|o| print o, " -- "}
# => 1 -- [1, 2] --
//}
ブロックを省略した場合は Enumerator が返されます。
@see Enumerable#slice_before... -
Enumerable
# each _ entry {|obj| block} -> self (12201.0) -
ブロックを各要素に一度ずつ適用します。
...配列として渡されます。
//emlist[例][ruby]{
class Foo
include Enumerable
def each
yield 1
yield 1,2
end
end
Foo.new.each_entry{|o| print o, " -- "}
# => 1 -- [1, 2] --
//}
ブロックを省略した場合は Enumerator が返されます。
@see Enumerable#slice_before... -
Enumerable
# sort _ by -> Enumerator (12201.0) -
ブロックの評価結果を <=> メソッドで比較することで、self を昇 順にソートします。ソートされた配列を新たに生成して返します。
...list[例][ruby]{
class Array
def sort_by
self.map {|i| [yield(i), i] }.
sort {|a, b| a[0] <=> b[0] }.
map {|i| i[1]}
end
end
//}
Enumerable#sort と比較して sort_by が優れている点として、
比較条件が複雑な場合の速度が挙げられます。
sort_by......ます。
従って downcase の実行速度が遅ければ sort の速度が致命的に低下します。
//emlist[][ruby]{
p ["BAR", "FOO", "bar", "foo"].sort {|a, b| a.downcase <=> b.downcase }
//}
一方、次のように sort_by を使うと downcase の実行回数は要素数と同じで......//emlist[][ruby]{
p ["BAR", "FOO", "bar", "foo"].sort_by {|v| v.downcase }
//}
以下の、実行回数の検証結果を参照してみてください。
//emlist[][ruby]{
class Integer
def count
$n += 1
self
end
end
ary = []
1.upto(1000) {|v| ary << rand(v) }
$n = 0
ary.sort {|a,b|... -
Enumerable
# sort _ by {|item| . . . } -> [object] (12201.0) -
ブロックの評価結果を <=> メソッドで比較することで、self を昇 順にソートします。ソートされた配列を新たに生成して返します。
...list[例][ruby]{
class Array
def sort_by
self.map {|i| [yield(i), i] }.
sort {|a, b| a[0] <=> b[0] }.
map {|i| i[1]}
end
end
//}
Enumerable#sort と比較して sort_by が優れている点として、
比較条件が複雑な場合の速度が挙げられます。
sort_by......ます。
従って downcase の実行速度が遅ければ sort の速度が致命的に低下します。
//emlist[][ruby]{
p ["BAR", "FOO", "bar", "foo"].sort {|a, b| a.downcase <=> b.downcase }
//}
一方、次のように sort_by を使うと downcase の実行回数は要素数と同じで......//emlist[][ruby]{
p ["BAR", "FOO", "bar", "foo"].sort_by {|v| v.downcase }
//}
以下の、実行回数の検証結果を参照してみてください。
//emlist[][ruby]{
class Integer
def count
$n += 1
self
end
end
ary = []
1.upto(1000) {|v| ary << rand(v) }
$n = 0
ary.sort {|a,b|... -
Enumerable
# tally -> Hash (12201.0) -
self に含まれる要素を数え上げた結果を Hash で返します。 Hash のキーは self に含まれる要素で、Hash の値は対応する要素が出現する回数です。
...、内部でも Hash と同等に要素を区別し数えます。
そのため、独自で定義するクラスでも Object#hash と Object#eql? を適切に定義することで数えることができます。
//emlist[例][ruby]{
["a", "b", "c", "b"].tally #=> {"a"=>1, "b"=>2, "c"=>1}
//}......スでも Object#hash と Object#eql? を適切に定義することで数えることができます。
@param hash 結果を加算していく Hash を指定します。更新される値は Integer である必要があります。
//emlist[例][ruby]{
["a", "b", "c", "b"].tally #=> {"a"=>1, "......b"=>2, "c"=>1}
h = {}
[:a, :b, :c].tally(h)
[:a, :b, :d].tally(h)
p h # => {:a=>2, :b=>2, :c=>1, :d=>1}
//}... -
Enumerable
# tally(hash) -> Hash (12201.0) -
self に含まれる要素を数え上げた結果を Hash で返します。 Hash のキーは self に含まれる要素で、Hash の値は対応する要素が出現する回数です。
...スでも Object#hash と Object#eql? を適切に定義することで数えることができます。
@param hash 結果を加算していく Hash を指定します。更新される値は Integer である必要があります。
//emlist[例][ruby]{
["a", "b", "c", "b"].tally #=> {"a"=>1, "......b"=>2, "c"=>1}
h = {}
[:a, :b, :c].tally(h)
[:a, :b, :d].tally(h)
p h # => {:a=>2, :b=>2, :c=>1, :d=>1}
//}... -
Enumerable
# lazy -> Enumerator :: Lazy (6325.0) -
自身を lazy な Enumerator に変換したものを返します。
...lazy な Enumerator に変換したものを返します。
この Enumerator は、以下のメソッドが遅延評価を行う (つまり、配列ではな
くEnumeratorを返す) ように再定義されています。
* map/collect
* flat_map/collect_concat
* select/find_all
* reject
*......grep
* take, take_while
* drop, drop_while
* zip (※一貫性のため、ブロックを渡さないケースのみlazy)
* cycle (※一貫性のため、ブロックを渡さないケースのみlazy)
以下はピタゴラス数 (a**2 + b**2 = c**2 を満たす自然数 a, b, c の組) を......emlist[例][ruby]{
def pythagorean_triples
(1..Float::INFINITY).lazy.flat_map {|z|
(1..z).flat_map {|x|
(x..z).select {|y|
x**2 + y**2 == z**2
}.map {|y|
[x, y, z]
}
}
}
end
# 最初の10個のピタゴラス数を表示する
p pythagorean_triples.take(... -
Enumerable
# any? {|item| . . . } -> bool (6201.0) -
すべての要素が偽である場合に false を返します。 真である要素があれば、ただちに true を返します。
...要素があれば、ただちに true を返します。
ブロックを伴う場合は、各要素に対してブロックを評価し、すべての結果
が偽である場合に false を返します。ブロックが真を返した時点
で、ただちに true を返します。
自身に......を返します。
//emlist[例][ruby]{
require 'set'
p Set[1, 2, 3].any? {|v| v > 3 } # => false
p Set[1, 2, 3].any? {|v| v > 1 } # => true
p Set[].any? {|v| v > 0 } # => false
p Set[nil, true, 99].any? # => true
p Set[].any?......# => false
//}
@see Array#any?......pattern ブロックの代わりに各要素に対して pattern === item を評価します。
//emlist[例][ruby]{
require 'set'
p Set[1, 2, 3].any? {|v| v > 3 } # => false
p Set[1, 2, 3].any? {|v| v > 1 } # => true
p Set[].any? {|v| v > 0 } # => false
p Set['ant',......'bear', 'cat'].any?(/d/) # => false
p Set[nil, true, 99].any?(Integer) # => true
p Set[nil, true, 99].any? # => true
p Set[].any? # => false
//}
@see Array#any?... -
Enumerable
# any?(pattern) -> bool (6201.0) -
すべての要素が偽である場合に false を返します。 真である要素があれば、ただちに true を返します。
...要素があれば、ただちに true を返します。
ブロックを伴う場合は、各要素に対してブロックを評価し、すべての結果
が偽である場合に false を返します。ブロックが真を返した時点
で、ただちに true を返します。
自身に......pattern ブロックの代わりに各要素に対して pattern === item を評価します。
//emlist[例][ruby]{
require 'set'
p Set[1, 2, 3].any? {|v| v > 3 } # => false
p Set[1, 2, 3].any? {|v| v > 1 } # => true
p Set[].any? {|v| v > 0 } # => false
p Set['ant',......'bear', 'cat'].any?(/d/) # => false
p Set[nil, true, 99].any?(Integer) # => true
p Set[nil, true, 99].any? # => true
p Set[].any? # => false
//}
@see Array#any?... -
Enumerable
# collect _ concat {| obj | block } -> Array (6201.0) -
各要素をブロックに渡し、その返り値を連結した配列を返します。
...ックに渡し、その返り値を連結した配列を返します。
ブロックの返り値は基本的に配列を返すべきです。
ブロックを省略した場合は Enumerator を返します。
//emlist[例][ruby]{
[[1,2], [3,4]].flat_map{|i| i.map{|j| j*2}} # => [2,4,6,8]
//}...