1. 程式人生 > >scala程式碼(二)

scala程式碼(二)

最近看PrefixSpan 原始碼,自己用java重新寫了,兩個問題浪費了不少時間。

1:scala的操作符如果沒有賦值,那麼是不影響原來的資料結構。可以看成是不可變類。

如ReversedPrefix add(int item)
        {
            assert(item != 0);    
            List<Integer> newItems = new ArrayList<Integer>(items);
            
            
            if (item < 0)
            {
                newItems.add( 0,-item );
                return new ReversedPrefix(newItems, length + 1);
            }
            else
            {
                newItems.add( 0,0 );
                newItems.add( 0,item );
                return new ReversedPrefix(newItems, length + 1);
            }
        }

 

我原來直接用items,沒有new List,趙成錯誤。

2:排序的寫法的問題。計算結果都是對的,但是顯示的次序不對,我的是升序,但是原始碼是降序,排查了一天,懷疑一切,把所有的原始碼的API都測試了一遍,就是不對。後來肯定是排序的升序和降序問題,再看程式碼,

scala的程式碼,val freqItems = freqItemAndCounts.sortBy(-_._2).map(_._1),

原來-_._2 是降序排序,前面有一個減號。根本沒注意。