size, count, length in ruby.
length: 该方法返回数组中元素的数量
[].length #=> 0
["a", "b", "c"].length #=> 3
size: 打开ruby size文档,一句话 Alias for Array#length,所以和length使用和返回值都是一样的。
[].size #=> 0
["a", "b", "c"].size #=> 3
count: 该方法也是返回数组中元素的数量
[].count #=> 0
["a", "b", "c"].count #=> 3
但是count用法与上面有所不同
1. 可以传入一个参数, 统计数组中指定元素的数量:
["a", "b", "c", "c"].count("c") #=> 2
2. 也可以传入一个block,统计符合block逻辑的元素的数量:
["a", "b", "c", "c"].count{|x| x=="c"} #=> 2
Rails中对这几个方法进行了复写, 我们写几个语句对比了解下具体的使用方式:
posts = user.posts # sql select all records
posts.length #=> 1 # no sql
posts.size #=> 1 # no sql
posts.count #=> 1 # run sql select again
通过上面的示例可以看到,在通过sql查询出posts之后,调用size和length表现是相同的,直接返回collection的数量,而调用count会再执行一次select count的sql查询。所以这种情况下,使用size或者length比count少一次查询,性能要好。
其它一些情况如这些方法也可以被String, Hash, Enumerator等方法调用,非常灵活,暂时就不展开了。
查看评论...