浏览 2872 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (11) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-03-25
最后修改:2009-03-25
RUBY_VERSION => 1.8.6 >> {'name', "Akhil"} => {"name"=>"Akhil"} >> {'name', "Akhil"} => {"name"=>"Akhil"} RUBY_VERSION => 1.9.1 >> {'name', "Akhil"} => syntax error, unexpected ',', expecting tASSOC >> {name: "Akhil"} => {:name=>"Akhil"} >> {'name', "Akhil"} => syntax error, unexpected ',', expecting tASSOC >> {name: "Akhil"} => {:name=>"Akhil"} 新的Hash加强了对序列处理 RUBY_VERSION => 1.8.6 >> hash = {:a=> 'A', :b=>'B', :c=>'C', :d=>'D'} => {:b=>"B", :c=>"C", :d=>"D", :a=>"A"} >> hash.to_a => [[:b, "B"], [:c, "C"], [:d, "D"], [:a, "A"]] >> hash.keys => [:b, :c, :d, :a] >> hash.values => ["B", "C", "D", "A"] >> hash = {:a=> 'A', :b=>'B', :c=>'C', :d=>'D'} => {:b=>"B", :c=>"C", :d=>"D", :a=>"A"} >> hash.to_a => [[:b, "B"], [:c, "C"], [:d, "D"], [:a, "A"]] >> hash.keys => [:b, :c, :d, :a] >> hash.values => ["B", "C", "D", "A"] RUBY_VERSION => 1.9.1 >> hash = {:a=> 'A', :b=>'B', :c=>'C', :d=>'D'} => {:a=>"A", :b=>"B", :c=>"C", :d=>"D"} >> hash.to_a => [[:a, "A"], [:b, "B"], [:c, "C"], [:d, "D"]] >> hash.keys => [:a, :b, :c, :d] >> hash.values => ["A", "B", "C", "D"] >> hash = {:a=> 'A', :b=>'B', :c=>'C', :d=>'D'} => {:a=>"A", :b=>"B", :c=>"C", :d=>"D"} >> hash.to_a => [[:a, "A"], [:b, "B"], [:c, "C"], [:d, "D"]] >> hash.keys => [:a, :b, :c, :d] >> hash.values => ["A", "B", "C", "D"] 有点像hash.inspect,更好的to_s方法 RUBY_VERSION => 1.8.6 >> hash = {:a=> 1, :b=>2, :c=>3, :d=>4} => {:b=>2, :c=>3, :d=>4, :a=>1} >> hash.to_s => "b2c3d4a1" >> hash = {:a=> 1, :b=>2, :c=>3, :d=>4} => {:b=>2, :c=>3, :d=>4, :a=>1} >> hash.to_s => "b2c3d4a1" RUBY_VERSION => 1.9.1 >> hash = {:a=> 1, :b=>2, :c=>3, :d=>4} => {:a=>1, :b=>2, :c=>3, :d=>4} >> hash.to_s => "{:a=>1, :b=>2, :c=>3, :d=>4}" >> hash = {:a=> 1, :b=>2, :c=>3, :d=>4} => {:a=>1, :b=>2, :c=>3, :d=>4} >> hash.to_s => "{:a=>1, :b=>2, :c=>3, :d=>4}" hash.each 和 hash.each_pair 的表达 RUBY_VERSION => 1.8.6 >> hash = {:a=> 1, :b=>2, :c=>3, :d=>4} => {:b=>2, :c=>3, :d=>4, :a=>1} >> hash.each{|x| p x} [:b, 2] [:c, 3] [:d, 4] [:a, 1] => {:b=>2, :c=>3, :d=>4, :a=>1} >> hash.each_pair{|x| p x} (irb):48: warning: multiple values for a block parameter (2 for 1) from (irb):48 [:b, 2] (irb):48: warning: multiple values for a block parameter (2 for 1) from (irb):48 [:c, 3] (irb):48: warning: multiple values for a block parameter (2 for 1) from (irb):48 [:d, 4] (irb):48: warning: multiple values for a block parameter (2 for 1) from (irb):48 [:a, 1] => {:b=>2, :c=>3, :d=>4, :a=>1} >> hash = {:a=> 1, :b=>2, :c=>3, :d=>4} => {:b=>2, :c=>3, :d=>4, :a=>1} >> hash.each{|x| p x} [:b, 2] [:c, 3] [:d, 4] [:a, 1] => {:b=>2, :c=>3, :d=>4, :a=>1} >> hash.each_pair{|x| p x} (irb):48: warning: multiple values for a block parameter (2 for 1) from (irb):48 [:b, 2] (irb):48: warning: multiple values for a block parameter (2 for 1) from (irb):48 [:c, 3] (irb):48: warning: multiple values for a block parameter (2 for 1) from (irb):48 [:d, 4] (irb):48: warning: multiple values for a block parameter (2 for 1) from (irb):48 [:a, 1] => {:b=>2, :c=>3, :d=>4, :a=>1} RUBY_VERSION => 1.9.1 >> hash = {:a=> 1, :b=>2, :c=>3, :d=>4} => {:a=>1, :b=>2, :c=>3, :d=>4} >> hash.each{|x| p x} [:a, 1] [:b, 2] [:c, 3] [:d, 4] => {:a=>1, :b=>2, :c=>3, :d=>4} >> hash.each_pair{|x| p x} [:a, 1] [:b, 2] [:c, 3] [:d, 4] => {:a=>1, :b=>2, :c=>3, :d=>4} >> hash = {:a=> 1, :b=>2, :c=>3, :d=>4} => {:a=>1, :b=>2, :c=>3, :d=>4} >> hash.each{|x| p x} [:a, 1] [:b, 2] [:c, 3] [:d, 4] => {:a=>1, :b=>2, :c=>3, :d=>4} >> hash.each_pair{|x| p x} [:a, 1] [:b, 2] [:c, 3] [:d, 4] => {:a=>1, :b=>2, :c=>3, :d=>4} hash.select现在会返回hash而不是array RUBY_VERSION => 1.8.6 >> hash = {:a=> 1, :b=>2, :c=>3, :d=>4} => {:b=>2, :c=>3, :d=>4, :a=>1} >> hash.select{|k,v| k == :c } => [[:c, 3]] >> hash = {:a=> 1, :b=>2, :c=>3, :d=>4} => {:b=>2, :c=>3, :d=>4, :a=>1} >> hash.select{|k,v| k == :c } => [[:c, 3]] RUBY_VERSION => 1.9.1 >> hash = {:a=> 1, :b=>2, :c=>3, :d=>4} => {:a=>1, :b=>2, :c=>3, :d=>4} >> hash.select{|k,v| k == :c } => {:c=>3} 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-03-25
最后修改:2009-03-25
在1.9,Hash的实现从单链表改成了双向循环链表。
struct st_table_entry { unsigned int hash; st_data_t key; st_data_t record; st_table_entry *next; st_table_entry *fore, *back; //加了这一行 }; 注:st_table不仅是Hash的基础,还是Object的基础。 理论上讲,由于需要改动更多的指针,插入和删除的性能降低了,但是双向指针提供了有序化列表项的能力,而且提升了遍历的性能。 不过一些benchmark表示,连插入和删除都略有提升。 |
|
返回顶楼 | |
发表时间:2009-03-25
night_stalker 写道 在1.9,Hash的实现从单链表改成了双向循环链表。
struct st_table_entry { unsigned int hash; st_data_t key; st_data_t record; st_table_entry *next; st_table_entry *fore, *back; //加了这一行 }; 注:st_table不仅是Hash的基础,还是Object的基础。 理论上讲,由于需要改动更多的指针,插入和删除的性能降低了,但是双向指针提供了有序化列表项的能力,而且提升了遍历的性能。 不过一些benchmark表示,连插入和删除都略有提升。 我觉得 Hash 最有意义的改进就是内容有序化了。 |
|
返回顶楼 | |