2011-07-19 65 views
2

想象一下,你有以下TreeMap中:通過他們的指數選擇樹形圖鍵

var dates = new TreeMap[Long, Tuple2[Int, Double]]() 

我知道我可以通過它與循環:

dates.foreach { case (date, (id, rotation)) => 
    ...   
} 

但在我的代碼,這個循環發生在另一個循環中,因此我想在日期鍵中推進自己,通常使用currIndex : Int變量,我將根據條件增加。

我認爲人們可以這樣做:

date = dates.keys(currIndex) 

,但它不像這是可能的......任何想法如何做到這一點?

+2

你能舉一個例子嗎?事實上,即使使用循環也意味着你仍然在使用命令式範式來思考問題(對於最近從Java過渡的任何人來說,這是非常普遍的)。如果你能提出整個使用案例,那麼建議替代方案會容易得多。 –

回答

3

編輯:試圖解決您的評論:

您可以將整個鍵轉換爲IndexedSeq事先:

val keysSeq = dates.keySet.toIndexedSeq 

// later, obtain an index 
val index: Int = /* ... */ 
// lookup the key 
val (valueInt, valueDouble) = dates(keysSeq(index)) 

以前的答案

你可以試試像這樣:

dates.iterator.zipWithIndex.foreach { 
    case ((key, (valueInt, valueDouble)), index) => 

} 

這樣可以嗎?我不確定我是否正確理解了「根據條件增加[ing currIndex]」的要求... ...

+0

謝謝,但這不是我想要的。我需要能夠從一個給定的鑰匙開始,然後從那裏繼續。隨着你的解決方案,我將不得不重新開始每一次... – seb