2016-01-24 45 views
0

在斯卡拉排序,我需要創建一個包含以下內容的結構:結構的值,而不是鍵

  • 一個Bitset - 代表是佔據一些細胞或不
  • Int - 最後一個單元格佔用
  • 一個Int - 本職業

的成本,因爲一個元素唯一地由的組合識別代表佔據細胞和Int代表的最後一個單元所佔據,我嘗試使用以下:

var tm = TreeMap.empty[Path, Int] 

其中Path是:

case class Path(occupied: BitSet, last: Int) 

然而,問題是,我想中的元素進行排序TreeMap由他們的成本(所以由他們的價值)。這顯然不適用於TreeMap

所以我可以有一個結構,我的價值而不是關鍵的元素排序?

回答

2

我想你尋找一個分類,然後設置:

import scala.collection.immutable.BitSet 
import scala.collection.immutable.SortedSet 

case class Path(occupied: BitSet, last: Int, cost: Int) 

implicit val pathOrd = Ordering.by((p: Path) => p.cost) 

SortedSet.empty[Path] 

假設costPath領域。如果成本是從Path計算的,則還可以定義:

case class Path(occupied: BitSet, last: Int) { 
    def cost: Int = ??? 
} 
+0

謝謝!我想通過'occup'和'last'來唯一標識'Path'元素,而不是'cost'。我可以使用'SortedSet'來做到這一點嗎? – octavian

+1

@octavian是的,如果您將'cost'定義爲方法(參見上面的代碼)或第二個構造函數參數列表,例如'case class Path(佔用:BitSet,last:Int)(val cost:Int)'。案例類的身份只考慮第一個列表的參數。 –

+0

'case class Path(佔用:BitSet,last:Int)(val cost:Int)'不適用於我。當我嘗試實例化類時出現錯誤: '錯誤:缺少構造函數的路徑類路徑中的路徑 新路徑(newBs,newLast)' – octavian

相關問題