それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

とびとびの配列を作るruby

10個ずつの数字とか、Rubyでどうやって作るか?なれるまで大変だった。rubyは規則性のある配列を作ることはとても簡単。

Rangeを覚えよう

rangeは覚えると楽ができる*1

Rangeの基本
(1..10).map{|i| i }    #=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
(120..130).map{|i| i } #=> [120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130]
#下降するRangeは作れない。
(10..1).map{|i| i }    #=> []
#下降するRangeを作るときはreverseする
(1..10).map{|i| i }.reverse    #=> => [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

Rangeの応用で目的の数列を作れる

10刻みの配列を作る
(1..10).map{|i| i*10 }  #=> [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]

偶数・奇数の配列を作る

(1..10).map{|i| i*2 }   #=> [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
(1..10).map{|i| i*2+1 } #=> [3, 5, 7, 9, 11, 13, 15, 17, 19, 21]
(1..10).map{|i| i*2-1 } #=> [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]

特に漸化式がある数列はこれで全部作ることができる。

最初の頃よく書いていた間違い。

今思うと恥ずかしい

arr=[]
10.times do|i|
  arr<<i*10
end
arr #=> [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]

これも恥ずかしい

最初の頃はこう書いていました。特に問題なのは、タイプ量の多さと記号の多さ

arr=[]
1.upto(10) do|i|
  arr.push( i*10 )
end


すっきり書けるのに、ちょっとした違い(Rangeの応用)に気づかない。
Rangeを使うようになってかなりすっきり書けるようになってきた。

PHPを捨ててRubyにする理由

PHPをつかって同じ事をすると面倒で見通しが悪い

<?php
$arr = null;
foreach( range(1,10) as $n=>$v){
  $arr[] = $v*10
}
var_dump($arr)

php5.3はラムダがあるから少しマシ

<?php
$map_func = function($v) {return $v * 10;}
$arr= array_map( $map_func , range(1, 10));

とくにPHP初心者がPHPを使うと、lamda/create_funcやforeachやrange関数、$a[]=1のような省略記法が無く、かなり冗長になってて、もう嫌だ。*2

*1:php/pythonにもある、でそれぞれ使い方が違うけど、

*2:せめてrangeは使ってほしい。