LoginSignup
0
0

More than 5 years have passed since last update.

Ruby Tips(自分用メモ)

Last updated at Posted at 2017-08-18

配列

[20170818] 10~16までのスクリプト実行ごとに変わるランダムな配列

a.rb
h_concentration =  []

for num in 0...10 do
  h_concentration.push((rand(10000..16000)/1000.0).round(1))
end

p h_concentration
$ ruby a.rb 
[12.4, 14.4, 12.0, 15.8, 10.9, 14.9, 11.2, 16.0, 10.0, 13.2]
$ ruby a.rb 
[14.2, 14.1, 14.2, 13.1, 13.7, 10.1, 11.8, 15.3, 10.9, 10.6] 結果が変わる

[20170818] 10~16までのスクリプト実行ごとに変わらないランダムな配列

b.rb
  1 h_concentration =  []
  2 init_seed = 12345
  3 b = 0
  4 total = 10
  5 
  6 for num in 0...total do
  7   prng1 = Random.new( num == 0? init_seed : b )
  8   prng1.seed
  9   b = prng1.rand(10000..16000)
 10   h_concentration.push((b/1000.0).round(1))
 11 end
 12 
 13 p h_concentration
$ ruby bb.rb 
[14.6, 14.2, 15.1, 13.3, 13.9, 14.4, 14.2, 14.1, 11.8, 15.2]
$ ruby bb.rb 
[14.6, 14.2, 15.1, 13.3, 13.9, 14.4, 14.2, 14.1, 11.8, 15.2] 結果が変わらない

頂いたコメントをもとに書き直してみたやつ。

bb.rb
  1 init_seed = 12345
  2 
  3 prng1=Random.new(init_seed)
  4 #prng1.seed
  5 a = Array.new(10){(prng1.rand(10.0...16.0)).round(1)} "これで10と16の確率が半分になるというのは問題ない?"
  6 p a
$ ruby bb.rb 
[15.6, 11.9, 11.1, 11.2, 13.4, 13.6, 15.8, 13.9, 14.5, 13.9]
$ ruby bb.rb 
[15.6, 11.9, 11.1, 11.2, 13.4, 13.6, 15.8, 13.9, 14.5, 13.9] 実行ごとにランダム配列の結果が変わらない

[20170818] 等差数列

c.rb
init_value = 9.95
class_interval_width=0.9
max_value = 16.00

i = ((max_value - init_value)/class_interval_width).ceil
class_interval = []

for num in 0...i do
  class_interval.push( (init_value + class_interval_width*num).round(2) )
end

p class_interval
$ ruby c.rb 
[9.95, 10.85, 11.75, 12.65, 13.55, 14.45, 15.35]

c.rbと同じことを簡単に実現する。

cc.rb
init_value = 9.95
class_interval_width=0.9
max_value = 16.00

class_interval = init_value.step(max_value, class_interval_width).map{|i| i.round(2)}

p class_interval

ruby cc.rb 
[9.95, 10.85, 11.75, 12.65, 13.55, 14.45, 15.35]

[20170818] 配列内の最小要素の位置を取得

irb(main):020:0> a=Array.new(10){rand(0..100)}
=> [72, 84, 98, 14, 50, 81, 18, 36, 16, 67]
irb(main):021:0> a.each_with_index.map{|v, i| v == a.min ? i : nil}.compact
=> [3]

[20170822] find_index

irb(main):024:0> a
=> [10.0, 10.9, 11.8, 12.7, 13.6, 14.5, 15.4]
irb(main):026:0> a.find_index{|i| i >= 11}.to_i
=> 2

[20170822] do

d.rb
a = (1..10).map do |x|
  x*3
end

p a
$ ruby d.rb
1
2
3
4
5
6
7
8
9
10
[3, 6, 9, 12, 15, 18, 21, 24, 27, 30]

[20180629]

irb(main):001:0> str="abcdefghi"
=> "abcdefghi"
irb(main):002:0> str.split(//,3)
=> ["a", "b", "cdefghi"]
irb(main):003:0> str.scan(/.{3}/)
=> ["abc", "def", "ghi"]
irb(main):004:0> str.match(/.{3}/)
=> #<MatchData "abc"> 
p "abcde-fghijklmno-pqrstuv,wxyz".delete("f-u,-")
=> "abcdevwxyz"
irb(main):020:0> str = "Ruby"
=> "Ruby"
irb(main):021:0> str[0..-2].swapcase
=> "rUB"

随時追加。よりよい書き方、方法があれば教えてください。

0
0
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0