fr-hirano / RubyPractice

RubyPractice
0 stars 0 forks source link

Rubyについての学習 #3

Open asonas opened 11 years ago

asonas commented 11 years ago

諸注意

Enumelableはよく使うので覚えておくといいでしょう http://doc.ruby-lang.org/ja/1.9.3/class/Enumerable.html

ハッシュ

<?php
array(
    "users" => array(
        "nocchi",
        "kashiyuka",
        "a~chan"
    )
)

課題2: 以下のphpの連想配列をRubyのHashで表してください

PHPではキャメルケースですが、Rubyではスネークケースなことに注意してください

<?php
array(
    "a~chan" => array(
        "realName" => "西脇綾香",
        "birthday" => "1989/2/15"
    ),
    "kashiyuka" => array(
        "realName" => "樫野有香",
        "birthday" => "1988/12/23"
    ),
    "nocchi" => array(
        "realName" => "大本彩乃",
        "birthday" => "1988/9/20"
    )
)

課題3: 課題2で作成したbirthdayDate(DateTime)クラスを使って表現してみてください


ruby + gem を使ってやること

水曜日あたりで少しヒアリングします。

おまけ

ペアプロします

fr-hirano commented 11 years ago

文字列連結 helloとworldを連結して hello worldにする

[hirano@f1 ~]$ irb
irb(main):001:0> %!test!
=> "test"
irb(main):002:0> p "hello" "world"
"helloworld"
=> "helloworld"
irb(main):003:0> "hello" "world"
=> "helloworld"
irb(main):004:0> "hello" + "world"
=> "helloworld"
irb(main):005:0> "hello" + " world"
=> "hello world"
fr-hirano commented 11 years ago

正規表現で置き換える writeをwrittenにする

irb(main):006:0> "write".gsub(/te/,"tten")
=> "written"
irb(main):007:0> "write".gsub(/e/,"ten")
=> "written"

puts, printの違いを記述してください

irb(main):020:0> print "test"
test=> nil
irb(main):021:0> puts "test"
test
=> nil
irb(main):022:0>

上記のようにputsでは出力後に改行を行うが、printでは改行を行わない

fr-hirano commented 11 years ago

URI %E3%83%AA%E3%83%BC%E3%83%80%E3%83%96%E3%83%AB%E3%82%B3%E3%83%BC%E3%83%89 を unescapeしてください

irb(main):017:0> require 'uri'
=> true
irb(main):018:0> $decode="%E3%83%AA%E3%83%BC%E3%83%80%E3%83%96%E3%83%AB%E3%82%B3%E3%83%BC%E3%83%89"
=> "%E3%83%AA%E3%83%BC%E3%83%80%E3%83%96%E3%83%AB%E3%82%B3%E3%83%BC%E3%83%89"
irb(main):019:0> URI.unescape($decode)
=> "リーダブルコード"
irb(main):020:0>
fr-hirano commented 11 years ago

1から10までの配列をつくる

irb(main):023:0> %w(1 2 3 4 5 6 7 8 9 10)
=> ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]

配列にひとつ値を追加する

irb(main):025:0> $array = %w(1 2 3 4 5 6 7 8 9 10)
=> ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]
irb(main):027:0> $array << 11
=> ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", 11]

配列から値を順番に取り出す

irb(main):007:0> $array = %w(1 2 3 4 5 6 7 8 9 10)
=> ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]
irb(main):008:0> while $array.size > 0
irb(main):009:1> $popdata = $array.pop
irb(main):010:1> print $popdata
irb(main):011:1> print "\n"
irb(main):012:1> end
10
9
8
7
6
5
4
3
2
1
=> nil

1から10の配列中身を全部足してください

irb(main):097:0> array = []; i = 0; while(i < 10); i += 1;array.push(i); end
=> nil
irb(main):098:0> $total = 0; while (array.size > 0); $tmp = array.pop; $total += $tmp; end
=> nil
irb(main):099:0> $total
=> 55
irb(main):100:0>
skyriser commented 11 years ago

Rubyで $ を付けるとグローバル変数になるので注意して下さい。 ローカル変数なら特に $ は不要ですー。

fr-hirano commented 11 years ago

課題1: 以下のPHPの連想配列をRubyのHashで表してください

irb(main):156:0> { :users=>{0=>"aka", 1=>"ao", 2=>'kiiro'} }
=> {:users=>{0=>"aka", 1=>"ao", 2=>"kiiro"}}
irb(main):157:0>

課題2: 以下のphpの連想配列をRubyのHashで表してください

irb(main):180:0> {:aka=>{:real_name=>'akane', :birthday=>'1990/3/28'}, :ao=>{:real_name=>'aoi', :birthday=>'2012/8/1'}, :kiiro=>{:real_name=>'satoshi', :birthday=>'1960/1/2'}}
=> {:aka=>{:real_name=>"akane", :birthday=>"1990/3/28"}, :ao=>{:real_name=>"aoi", :birthday=>"2012/8/1"}, :kiiro=>{:real_name=>"satoshi", :birthday=>"1960/1/2"}}
irb(main):181:0>
fr-hirano commented 11 years ago

@skyriserありがとうございます>< phpの癖が。。

fr-hirano commented 11 years ago

課題3: 課題2で作成したbirthdayをDate(DateTime)クラスを使って表現してみてください

irb(main):037:0> test = {:aka=>{:real_name=>'akane', :birthday=>Date._parse('1990/3/28')}, :ao=>{:real_name=>'aoi', :birthday=>Date._parse('2012/8/1')}, :kiiro=>{:real_name=>'satoshi', :birthday=>Date._parse('1960/1/2')}}
=> {:aka=>{:real_name=>"akane", :birthday=>{:year=>1990, :mon=>3, :mday=>28}}, :ao=>{:real_name=>"aoi", :birthday=>{:year=>2012, :mon=>8, :mday=>1}}, :kiiro=>{:real_name=>"satoshi", :birthday=>{:year=>1960, :mon=>1, :mday=>2}}}
irb(main):038:0>
fr-hirano commented 11 years ago

課題4 課題3で作成したHashからbirthdayを取り出し、それぞれの曜日を求めてください

元になるhashを作成

irb(main):037:0> test = {:aka=>{:real_name=>'akane', :birthday=>Date._parse('1990/3/28')}, :ao=>{:real_name=>'aoi', :birthday=>Date._parse('2012/8/1')}, :kiiro=>{:real_name=>'satoshi', :birthday=>Date._parse('1960/1/2')}}
=> {:aka=>{:real_name=>"akane", :birthday=>{:year=>1990, :mon=>3, :mday=>28}}, :ao=>{:real_name=>"aoi", :birthday=>{:year=>2012, :mon=>8, :mday=>1}}, :kiiro=>{:real_name=>"satoshi", :birthday=>{:year=>1960, :mon=>1, :mday=>2}}}

表示用に小分け

irb(main):038:0> aka = test[:aka]
=> {:real_name=>"akane", :birthday=>{:year=>1990, :mon=>3, :mday=>28}}
irb(main):039:0> ao = test[:ao]
=> {:real_name=>"aoi", :birthday=>{:year=>2012, :mon=>8, :mday=>1}}
irb(main):040:0> kiiro = test[:kiiro]
=> {:real_name=>"satoshi", :birthday=>{:year=>1960, :mon=>1, :mday=>2}}

曜日を算出(月曜が1,日曜が7)

irb(main):041:0> Date.new(aka[:birthday][:year], aka[:birthday][:mon], aka[:birthday][:mday]).cwday
=> 3
irb(main):042:0> Date.new(ao[:birthday][:year], ao[:birthday][:mon], ao[:birthday][:mday]).cwday
=> 3
irb(main):043:0> Date.new(kiiro[:birthday][:year], kiiro[:birthday][:mon], kiiro[:birthday][:mday]).cwday                                                                
=> 6
skyriser commented 11 years ago

Date._parse

::_parse は戻り値がHashになってます。違うもの使ってみてくださいー

Date._parse("2012-3-3").class
=> Hash
fr-hirano commented 11 years ago

Hashの中だからとりあえず、_付きの方でやってみました。

違うのもやってみます

skyriser commented 11 years ago

Date(DateTime)クラスを使って表現

とあるので一応ね。w

fr-hirano commented 11 years ago

:thumbsup:

fr-hirano commented 11 years ago
 {:aka=>{:real_name=>'akane', :birthday=>Date.new(1990, 3, 28)}, :ao=>{:real_name=>'aoi', :birthday=>Date.new(2012, 8, 1)}, :kiiro=>{:real_name=>'satoshi', :birthday=>Date.new(1960, 1, 2)}}

こういうことだろうか・・・

asonas commented 11 years ago

こういうことだろうか・・・

:+1:

ハッシュの課題は1行だと見づらいので hash.rb みたいなファイルをつくっても大丈夫ですよ。

fr-hirano commented 11 years ago

ハッシュの課題は1行だと見づらいので hash.rb みたいなファイルをつくっても大丈夫ですよ。

@asonas もう少し時間があるので、それに試みているとこでした。 苦戦中。