title:  irbでの対話の例 2

irbでの対話の例 2

> irb
irb(main):001:0> a=(1..5).to_a
=> [1, 2, 3, 4, 5]
irb(main):002:0> a="abcdefg".split(//)
=> ["a", "b", "c", "d", "e", "f", "g"]

irb(main):003:0> a.reduce{|r,e|e}       # r を使わない場合
=> "g"
irb(main):004:0> a.reduce{|r,e|r}       # e を使わない場合
=> "a"
irb(main):005:0> a.reduce(:+)
=> "abcdefg"                    # すべて連結される
irb(main):006:0> a.reduce(:*)   # String同士の ’*’は定義されていない
TypeError: no implicit conversion of String into Integer
        from (irb):6:in `*'
        from (irb):6:in `reduce'
        from (irb):6
        from C:/ProgramData/chocolatey/ruby24/bin/irb.cmd:19:in `<main>'
irb(main):008:0> (1..10).reduce(:+)
=> 55
irb(main):009:0> (1..10).reduce(:*)     # 階乗
=> 3628800
irb(main):010:0> (1..30).reduce(:*)
=> 265252859812191058636308480000000
irb(main):011:0> (1..100).reduce(:*)
=> 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
irb(main):012:0>(1..100)..reduce(:*).to_s
=> "93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000"
irb(main):013:0> (1..100).reduce(:*).to_s.length # 桁数
=> 158
irb(main):016:0> 2**4       # べき乗
=> 16
irb(main):017:0> 3**5
=> 243

irb(main):001:0> a="hello".split
=> ["hello"]
irb(main):002:0> a="hello".split(//)
=> ["h", "e", "l", "l", "o"]
irb(main):003:0> a.map{|e|e*3}
=> ["hhh", "eee", "lll", "lll", "ooo"]
irb(main):004:0> a.map{|moji|moji*3}
=> ["hhh", "eee", "lll", "lll", "ooo"]  # 仮引数の名前は何でもいい
irb(main):005:0> a
=> ["h", "e", "l", "l", "o"]
irb(main):006:0> a.map!{|moji|moji*3}   # 破壊的メソッドを適用
=> ["hhh", "eee", "lll", "lll", "ooo"]
irb(main):007:0> a
=> ["hhh", "eee", "lll", "lll", "ooo"]  # すると aの値が変化した
irb(main):008:0> (1..10).map{|i|i*10}
=> [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
irb(main):009:0> (1..10).map{|i|i*10}.class
=> Array
irb(main):010:0> (1..10).select{|e|e%3==0}
=> [3, 6, 9]
irb(main):011:0> (1..10).to_a       # Arrayに変換
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
irb(main):012:0> (1..10).map{|e|e%3}
=> [1, 2, 0, 1, 2, 0, 1, 2, 0, 1]
irb(main):013:0> 1==0
=> false
irb(main):014:0> 1==1
=> true
irb(main):015:0> [1,2,3,4,5].reduce{|r,e|r+e}
=> 15
irb(main):016:0> [1,2,3,4,5].reduce{|r,e|r*e}
=> 120
irb(main):017:0> [0,1,2,3,4,5].reduce{|r,e|r*e}
=> 0                        # 0 があると階乗しても0
irb(main):018:0> "abcdefg".split(//)
=> ["a", "b", "c", "d", "e", "f", "g"]
irb(main):019:0> a=_
=> ["a", "b", "c", "d", "e", "f", "g"]
irb(main):020:0> a.reduce{|r,e|r+e}
=> "abcdefg"
irb(main):021:0> a.reduce{|r,e|r+e+e}
=> "abbccddeeffgg"
irb(main):022:0> a.reduce{|r,e|e+r+e}
=> "gfedcbabcdefg"
irb(main):023:0> a.reduce(""){|r,e|e+r+e}
=> "gfedcbaabcdefg"
irb(main):024:0> a.reduce(""){|r,e|r+e*2}
=> "aabbccddeeffgg"
irb(main):025:0>  a.reduce(""){|r,e|e+r}
=> "gfedcba"
irb(main):047:0> (1..10000).map{rand}.sort.size # すべて表示させると時間がかかるのでサイズのみ
=> 10000            # あたりまえだがサイズは10000
irb(main):048:0> (1..100000).map{rand}.sort.size    # 応答時間を確かめるための実験
=> 100000
irb(main):049:0> (1..1000000).map{rand}.sort.size
=> 1000000          # このぐらいのサイズでも普通に応答する

irb(main):050:0> a=(0...10).map{rand}
=> [0.0855877400115782, 0.713983618610481,1358405075974, 0.005781672646979263, 0.480258357, 0.4597502922182227, 0.088936842149.8393632921425206, 0.08876205586570274, 0.016829]
irb(main):050:0> a.reduce{|r,e|if r>e then r else e end}        # 最大の数
=> 0.8393632921425206
irb(main):052:0> a.reduce{|r,e|if r<e then r else e end}        # 不等号の向きだけ変えた
=>  0.005781672646979263    # 最小の数
irb(main):053:0> a.size
=> 10
irb(main):055:0> (0..a.size)    # Rangeリテラルの記法
=> 0..10
irb(main):056:0> (0...a.size)   # '...' だと上限の値を含まない
=> 0...10
irb(main):057:0> (0...a.size).to_a
=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
irb(main):058:0> (0..a.size).to_a
=> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# ここから zip の使い方

irb(main):059:0> a.zip(0...a.size)
=> [[0.0855877400115782, 0], [0.7139836186], [0.012151358405075974, 2], [0.0057816723, 3], [0.48052039613258357, 4], [0.45975027, 5], [0.08893684214972153, 6], [0.83936206, 7], [0.08876205586570274, 8], [0.536429, 9]]
irb(main):060:0> a.zip(0...a.size).max
=> [0.8393632921425206, 7]
irb(main):061:0> a.zip(0...a.size).max[1] 
=> 7    # 最大の値が何番目だったか を現す数
irb(main):062:0> a.each_with_index.max[1]
=> 7    # each_with_index(をブロックなしで呼ぶ)でも同等
irb(main):063:0> 0...1000000
=> 0...1000000
irb(main):064:0> (0...1000000).to_a.class
=> Array    # 大きなサイズの配列を作ってみる(このぐらいなら動作する)  
irb(main):065:0>