給出如下的一系列項目爲:懶洋洋地分組在F#平坦的序列
[ ("a", 1); ("a", 2); ("a", 3); ("b", 1); ("c", 2); ("c", 3) ]
我如何轉換懶洋洋地成這樣:
{ ("a", { 1; 2; 3}); ("b", { 1 }); ("c", { 2; 3}) }
你可以假設輸入數據源已經按分組鍵元素排序,例如, 「a」「b」和「c」。
我在那裏使用{}來表示這是一個懶惰評估的項目序列。
我已經得到了它的工作勢在必行的兩個while循環在源序列的IEnumerator操作,但這涉及到創建引用變量和變異等等。我相信有更好的方法做到這一點,也許使用遞歸或使用Seq庫中的一些操作,例如掃描還是展開?
我之前做過類似的事情,也有一些突變:http://rojepp.wordpress.com/2012/12/20/sql-optimization-trick-in-f/ –