group by繼續上次的to proc

2021-08-30 18:37:33 字數 1774 閱讀 6385

assuming recorded_on is a date, and not a datetime:

@records = record.all.group_by(&:recorded_on)

if it is a datetime:

@records = record.all.group_by

讓我們看下這一切是如何工作的:

class symbol     

# turns the symbol into a ****** proc, which is especially useful for enumerations. examples:

#

# # the same as people.collect

# people.collect(&:name)

#

# # the same as people.select .collect

# people.select(&:manager?).collect(&:salary)

def to_proc

proc.new

end

end

&符號用在symbol前面實際上是呼叫了to_proc方法,而to_proc裡返回乙個proc物件,內部為呼叫symbol指定的方法。

[i]這個在ruby irb和rails console有區別如下:[/i]

[color=red]這個是不對的,見下面的更正[/color]

irb:

[1, 2, 3, 4, 5,6].group_by

return a hash

rails console:

[1, 2, 3, 4, 5,6].group_by

return a array

rails中支援group_by方法,在console裡看看其工作原理:

>> a=(1..20).to_a

=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]

>> a.group_by

=>

>>

通過乙個block提出的條件將乙個陣列轉化為乙個hash.

hash的key是陣列元素執行block之後得到的結果

value是原陣列中執行block得到key的元素組成的陣列.

所以,可以在rails中這麼用:

譬如根據性別對學生進行分組:

@students=student.find(:all)

@[email protected]_by

-那麼現在得到的@student_groups就有兩組,一組是male,一組是female.

在對其進行迴圈的時候,使用hash迴圈的方式:

<% @student_groups.each do |gender,students| %>

<%= gender %>

<% end %>

====結果如下:

female

lucy

jessi

male

jack

jimmike

hash的迴圈方式:

2層迴圈,先對keys進行迴圈,然後是key對應的values進行迴圈.

關於上次寫的計畫

上次安排的那個複習計畫簡直是不可能的,這就是我這幾天得出的結論。唉,好高騖遠了。一周複習c 和unix環境高階程式設計意味著我每天要看50p以上的c primer 接著以前的進度 70p的 unix環境高階編 汗。雖然以前寫 的時候經常查閱,但是具體詳細的閱讀,這個量太大了。這是第三天,我徹底被打敗...

詭異的Group by函式

select 表2.name,count id 管理員from 表2 where 表2.name in select name from 表1 group by 表2.name 使用上面這個語句sql通常會報錯 訊息 8120,級別 16,狀態 1,第 1 行 列 表2.管理員 在選擇列表中無效,因...

group by 方法的使用

有時候,你也許需要將乙個陣列中的元素根據某種規則進行分組。那麼group by方法就是很好的選擇。先來看下面的例子 a 1.20 to a 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 a.group by 0,1,2,3,4 1,5,6,7,...