狠狠撸
Submit Search
Ruby with Hash
?
Download as KEY, PDF
?
3 likes
?
1,042 views
Jun Yokoyama
Follow
搁耻产测のハッシュについて
Read less
Read more
1 of 128
Download now
Download to read offline
More Related Content
Ruby with Hash
1.
Ruby with Hash 2012/5/24
yoyogi.rb
2.
搁耻产测のハッシュについて
3.
自己紹介 フリーエンジニア twitter:@nysalor blog: http://blog.larus.jp/ 好きなメソッドはEnumerable#map
4.
前座 記号が色々出てきて混乱するという意見があったの で
5.
変数名まとめ
6.
変数名まとめ ローカル変数
7.
変数名まとめ ローカル変数 a hoge under_score camelCase ms06
8.
変数名まとめ ローカル変数 a hoge
英数と_のみ under_score 一文字目は小文字 camelCase ms06
9.
変数名まとめ
10.
変数名まとめ
11.
変数名まとめ インスタンス変数
12.
変数名まとめ インスタンス変数 @a @hoge @under_score @camelCase @ms06
13.
変数名まとめ インスタンス変数 @a @hoge
@で始まる @under_score @camelCase @ms06
14.
変数名まとめ
15.
変数名まとめ
16.
変数名まとめ クラス変数
17.
変数名まとめ クラス変数 @@a @@hoge @@under_score @@camelCase @@ms06
18.
変数名まとめ クラス変数 @@a @@hoge
@@で始まる @@under_score あまり使わない @@camelCase @@ms06
19.
変数名まとめ
20.
変数名まとめ
21.
変数名まとめ 定数
22.
変数名まとめ 定数 A Hoge Under_score CamelCase MS06
23.
変数名まとめ 定数 A Hoge
大文字で始まる Under_score 変更しようとすると警告 (変更できないわけではない) CamelCase MS06
24.
変数名まとめ
25.
ここから本题
26.
ハッシュ? いわゆる連想配列 Hashクラスで定義 {}でくくる 要素は何でもいい
27.
ハッシュの例 {“?rst” => 1,
“second” => 2, “third” => 3} {?rst:1, second:2, third:3} {“integer” => 1, “string” => ”text”, :array => [1, 2, 3]}
28.
ハッシュの例 {“?rst” => 1,
“second” => 2, “third” => 3} {?rst:1, second:2, third:3} Ruby1.9以降 {“integer” => 1, “string” => ”text”, :array => [1, 2, 3]}
29.
ハッシュの作り方
30.
ハッシュの作り方 空のハッシュ
31.
ハッシュの作り方 空のハッシュ a = {} a
= Hash.new
32.
ハッシュの作り方
33.
ハッシュの作り方 中身の入ったハッシュ
34.
ハッシュの作り方 中身の入ったハッシュ a = {“?rst”
=> 1, “second” => 2} a = Hash.new(1) #=> {} a = Hash[“?rst”, 1, “second”, 2] a = Hash[*array]
35.
シンボル
36.
シンボル シンボルをキーにすることが多い
37.
シンボル シンボルをキーにすることが多い {:?rst => 1,
:second => 2, :third => 3} {?rst:1, second:2, third:3}
38.
シンボル?
39.
シンボル? Rubyの内部実装では、メソッド名や変数名、定数名、クラス名など の`名前'を 整数で管理しています。これは名前を直接文字列として処理するよりも 速度面 で有利だからです。そしてその整数をRubyのコード上で表現したものがシンボ ルです。 シンボルは、ソース上では文字列のように見え、内部では整数として扱われる、 両者を仲立ちするような存在です。
40.
シンボル? Rubyの内部実装では、メソッド名や変数名、定数名、クラス名など の`名前'を 整数で管理しています。これは名前を直接文字列として処理するよりも 速度面 で有利だからです。そしてその整数をRubyのコード上で表現したものがシンボ ルです。 シンボルは、ソース上では文字列のように見え、内部では整数として扱われる、 両者を仲立ちするような存在です。
from Rubyリファレンスマニュアル
41.
シンボル?
42.
シンボル?
43.
シンボル? 文字列の前に:を付ける
44.
シンボル? 文字列の前に:を付ける :a :hoge :under_score :CamelCase :ms06
45.
シンボル? 文字列の前に:を付ける :a :hoge
読みやすい :under_score 書き換えられない ちょっと速い(かも知れない) :CamelCase :ms06
46.
シンボル?
47.
ハッシュの使い方
48.
ハッシュの使い方 # all
versions 1.9.x only a = {:alpha => "a", :bravo => "b", :charlie => "c"} # 1.9.x only a = {alpha: "a", bravo: "b", charlie: "c"}
49.
要素の取り出し
50.
要素の取り出し a =
{:alpha => "a", :bravo => "b", :charlie => "c"}
51.
要素の取り出し
a = {:alpha => "a", :bravo => "b", :charlie => "c"} a[:alpha] #=> “a” a.fetch(:bravo) #=> “b” a.values #=> [“a”, “b”, “c”]
52.
キーの取り出し
53.
キーの取り出し a =
{:alpha => "a", :bravo => "b", :charlie => "c"}
54.
キーの取り出し
a = {:alpha => "a", :bravo => "b", :charlie => "c"} a.keys #=> [:alpha, :bravo, :charlie]
55.
要素とキーの取り出し
56.
要素とキーの取り出し a =
{:alpha => "a", :bravo => "b", :charlie => "c"}
57.
要素とキーの取り出し
a = {:alpha => "a", :bravo => "b", :charlie => "c"} a.?rst #=> [:alpha, “a”] a.assoc(:bravo) #=> [:bravo, “b”] a.shift #=> [:alpha, “a”] a.to_a #=> [[:alpha, “a”], [:bravo, “b”], [:charlie, “c”]]
58.
要素とキーの取り出し
a = {:alpha => "a", :bravo => "b", :charlie => "c"} a.?rst #=> [:alpha, “a”] a.assoc(:bravo) #=> [:bravo, “b”] a.shift #=> [:alpha, “a”] 要素が削除される a.to_a #=> [[:alpha, “a”], [:bravo, “b”], [:charlie, “c”]]
59.
要素の追加?更新
60.
要素の追加?更新 a =
{:alpha => "a", :bravo => "b", :charlie => "c"}
61.
要素の追加?更新
a = {:alpha => "a", :bravo => "b", :charlie => "c"} a[:delta] = “d”
62.
ハッシュの评価
63.
ハッシュの评価 a =
{:alpha => "a", :bravo => "b", :charlie => "c"}
64.
ハッシュの评価
a = {:alpha => "a", :bravo => "b", :charlie => "c"} a.has_key?(:bravo) #=> true a.empty? #=> false
65.
ハッシュの検索
66.
ハッシュの検索 a =
{:alpha => "a", :bravo => "b", :charlie => "c"}
67.
ハッシュの検索
a = {:alpha => "a", :bravo => "b", :charlie => "c"} a.select{|k, v| k == :alpha && v == “a”}
68.
ハッシュのマージ
69.
ハッシュのマージ a =
{:alpha => "a", :bravo => "b", :charlie => "c"} b = {:able => "A", :baker => "B", :charlie => "C"}
70.
ハッシュのマージ
a = {:alpha => "a", :bravo => "b", :charlie => "c"} b = {:able => "A", :baker => "B", :charlie => "C"} a.merge(b) a.merge!(b) a.update(b) a.merge({:charlie => “C”, :delta => “d”}) a.merge(b){|k, a, b| a + b}
71.
ハッシュのマージ
a = {:alpha => "a", :bravo => "b", :charlie => "c"} b = {:able => "A", :baker => "B", :charlie => "C"} a.merge(b) a.merge!(b) 破壊的メソッド a.update(b) a.merge({:charlie => “C”, :delta => “d”}) a.merge(b){|k, a, b| a + b}
72.
ハッシュのマージ
a = {:alpha => "a", :bravo => "b", :charlie => "c"} b = {:able => "A", :baker => "B", :charlie => "C"} a.merge(b) a.merge!(b) 破壊的メソッド a.update(b) 破壊的メソッド a.merge({:charlie => “C”, :delta => “d”}) a.merge(b){|k, a, b| a + b}
73.
イテレーション
74.
イテレーション a = {:alpha
=> "a", :bravo => "b", :charlie => "c"} a.each do |k, v| p k p v end a.each_pair do |k, v| p k p v end
75.
イテレーション a = {:alpha
=> "a", :bravo => "b", :charlie => "c"} a.each do |k, v| p k ブロック変数 p v end a.each_pair do |k, v| p k p v end
76.
イテレーション a = {:alpha
=> "a", :bravo => "b", :charlie => "c"} a.each do |k, v| p k ブロック変数 p v end a.each_pair do |k, v| p k ブロック変数 p v end
77.
イテレーション
78.
イテレーション a = {:alpha
=> "a", :bravo => "b", :charlie => "c"} a.each_key do |k| p k p a[k] end a.each_value do |v| p v end
79.
イテレーション a = {:alpha
=> "a", :bravo => "b", :charlie => "c"} a.each_key do |k| p k ブロック変数 p a[k] end a.each_value do |v| p v end
80.
イテレーション a = {:alpha
=> "a", :bravo => "b", :charlie => "c"} a.each_key do |k| p k ブロック変数 p a[k] end a.each_value do |v| p v ブロック変数 end
81.
応用编
82.
応用编 無名ハッシュを返すメソッド
83.
応用编 無名ハッシュを返すメソッド def const_hash
{ eagle: 15, falcon: 16, hornet: 18, } end const_hash[:eagle] #=> 15
84.
応用编 無名ハッシュを返すメソッド def const_hash
初期設定などに便利 { eagle: 15, falcon: 16, hornet: 18, } end const_hash[:eagle] #=> 15
85.
応用编 無名ハッシュを返すメソッド
86.
応用编 無名ハッシュを返すメソッド
87.
応用编 無名ハッシュを返すメソッド const_hash[:eagle]
= “15E” const_hash[:eagle] #=> 15 const_hash[:cobra] = 17 const_hash[:cobra] #=> nil
88.
応用编 無名ハッシュを返すメソッド const_hash[:eagle]
= “15E” const_hash[:eagle] #=> 15 const_hash[:cobra] = 17 const_hash[:cobra] #=> nil 呼び出すたびに初期値が返る
89.
応用编
90.
応用编
91.
応用编 引数にハッシュを取るメソッド
92.
応用编 引数にハッシュを取るメソッド def args_by_hash(params =
{}) options = {:tiger => 88, :panther => 75}.merge! (params) p options end args_by_hash(mouse: 128) #=> {:tiger => 88, :panther => 75, :mouse => 128} args_by_hash(:tiger => 128, :panther => 88, :long => 75) #=> {:tiger => 128, :panther => 88, :lang => 75}
93.
Let’s Try!
94.
Let’s Try! ハッシュの値を全てStringにする
95.
Let’s Try! ハッシュの値を全てStringにする data =
{ showa: 1926, meiji: 1868, taisho: 1912, heisei: 1989, } # => {:showa => “1926”, :meiji => “1868”,...}
96.
Let’s Try!
97.
Let’s Try!
98.
Let’s Try! ハッシュの値を全てStringにする
99.
Let’s Try! ハッシュの値を全てStringにする data =
{ showa: 1926, meiji: 1868, taisho: 1912, heisei: 1989, } Hash[*data.to_a.map{|x| [x.first, x.last.to_s]}] # => {:showa => “1926”, :meiji => “1868”,...}
100.
Let’s Try!
101.
Let’s Try!
102.
Let’s Try! ハッシュを値でソートしてキーを返す
103.
Let’s Try! ハッシュを値でソートしてキーを返す data =
{ showa: 1926, meiji: 1868, taisho: 1912, heisei: 1989, } # => [:meiji, :taisho, :showa, :heisei]
104.
Let’s Try!
105.
Let’s Try!
106.
Let’s Try! ハッシュを値でソートしてキーを返す
107.
Let’s Try! ハッシュを値でソートしてキーを返す data =
{ showa: 1926, meiji: 1868, taisho: 1912, heisei: 1989, } data.invert.sort.map{|x| x.last} # => [:meiji, :taisho, :showa, :heisei]
108.
Let’s Try!
109.
Let’s Try!
110.
Let’s Try! 二つの配列からハッシュを作成する
111.
Let’s Try! 二つの配列からハッシュを作成する array_a =
[:meiji, :taisho, :showa, :heisei] array_b = [1868, 1912, 1926, 1989] # => {:meiji => 1868, :taisho => 1912,...}
112.
Let’s Try!
113.
Let’s Try!
114.
Let’s Try! 二つの配列からハッシュを作成する
115.
Let’s Try! 二つの配列からハッシュを作成する array_a =
[:meiji, :taisho, :showa, :heisei] array_b = [1868, 1912, 1926, 1989] Hash[*array_a.map{ |x| [x, array_b[array_a.index(x)]] }.flatten] # => {:meiji => 1868, :taisho => 1912,...}
116.
Let’s Try!
117.
Let’s Try!
118.
Let’s Try! 二つのハッシュをマージして値の大きい方だけを残す
119.
Let’s Try! 二つのハッシュをマージして値の大きい方だけを残す hash_a =
{meiji: 45, taisho: 1926, showa: 64, :heisei => 2012} hash_b = {meiji: 1912, taisho: 15, showa: 1989, :heisei => 24} # => {:meiji => 1912, :taisho => 1926,...}
120.
Let’s Try!
121.
Let’s Try!
122.
Let’s Try! 二つのハッシュをマージして値の大きい方だけを残す
123.
Let’s Try! 二つのハッシュをマージして値の大きい方だけを残す hash_a =
{meiji: 45, taisho: 1926, showa: 64, :heisei => 2012} hash_b = {meiji: 1912, taisho: 15, showa: 1989, :heisei => 24} hash_a.merge(hash_b){|k,a,b| [a,b].sort.last} # => {:meiji => 1912, :taisho => 1926,...}
124.
Let’s Try!
125.
まとめ ハッシュはちょっと扱いにくい 配列を返すメソッドが多い キーはシンボルが無難
126.
质疑応答
127.
质疑応答 if available? ??Question.all.map(&:answer!) end
128.
ご清聴ありがとうございました
Editor's Notes
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
Download