2014-07-18 81 views
1

我在努力理解爲什麼會發生這種情況瘋了:我有一個包含6個整數的集合(一個不可變的SortedSet),以及我通過.map方法迭代它們來創建我生成的HTML。每次重新加載頁面時,HTML頁面中的元素總是以不同的順序顯示。生成的HTML中顯示的元素的順序與集合中的元素的順序不匹配

下面是我的模板

@deltas = @{ scala.collection.SortedSet[Int](-15, -10, -5, 5, 10, 15) } 

    @*** More code here ***@ 

@Logger.debug("DELTAS="+deltas.toString()) 
@deltas.map { delta => 
<li> 
    @Logger.debug("DELTA="+delta.toString()) 
    <a href="#">@{dist.toDouble.intValue + delta}&nbsp;km (@delta)</a> 
</li> 
} 

我也試圖登錄輸出到屏幕上的一些摘錄 - 看記錄器 - 作爲預期的元素被以正確的順序總是顯示。

[debug] application - DELTAS=TreeSet(-15, -10, -5, 5, 10, 15) 
[debug] application - DELTA=-15 
[debug] application - DELTA=-10 
[debug] application - DELTA=-5 
[debug] application - DELTA=5 
[debug] application - DELTA=10 
[debug] application - DELTA=15 

現在我只能說,這個問題必須在模板引擎,但我想知道它是否是一個錯誤(不太可能),或者我只需要知道它的一些技巧方面的東西更多(很可能)。

回答

2

顯然它似乎與模板引擎有關。我需要深入挖掘以找出原因。在這個時候,我可以通過使用collection的迭代器來爲這個問題提出解決方案。

@for(delta <- deltas.iterator) { 
<li> 
    <a href="#">@{dist.toDouble.intValue + delta}&nbsp;km (@delta)</a> 
</li> 
} 

您也可以將TreeSet轉換爲Seq來解決問題。

上一頁

更新前的第一個線索:

你可以閱讀這個問題更多地瞭解一個SortedSet的映射

SortedSet map does not always preserve element ordering in result?

+0

我讀過你指出後,但它與我在代碼中得到的東西無關:如果仔細看看我發佈的代碼和Logger輸出,你會同意我的看法,即相同的迭代給出在播放正在運行的終端(記錄器)上的正確結果,但在生成的HTML頁面上,我每次加載頁面時都有一個隨機順序(這是與您的建議無關的另一個證據)。 – Max

+0

迭代器方法解決了問題!我在你的建議之前嘗試了其他迭代技術,但沒有運氣...... – Max