2012-01-27 5 views
2

これは私には間違っているように見えます - 要素の順序が構築された順序から変わったのはなぜですか?順序付けされたxml要素をスカラーで作成するにはどうすればよいですか?

scala> var list = collection.immutable.TreeSet(1, 3, 2, 5, 0) 
list: scala.collection.immutable.TreeSet[Int] = TreeSet(0, 1, 2, 3, 5) 

scala> var xml = <list>{ list.map(number => { <number>{number}</number> }) }</list> 
xml: scala.xml.Elem = <list><number>3</number><number>1</number><number>2</number><number>5</number><number>0</number></list> 

scala> var xml = <list>{ list.map(number => { println(number); <number>{number}</number> }) }</list> 
0 
1 
2 
3 
5 
xml: scala.xml.Elem = <list><number>3</number><number>1</number><number>2</number><number>5</number><number>0</number></list> 

答えて

2

TreeSetをマップすると、新しいセットが作成されます。新しいSetはもちろん、その要素が整数ではないので、整数の自然順序付けを使用しません。実際には、Elemの自然順序付けは存在しないため、新しいセットは順序付けられていません。あなたはあなたが探している注文を達成することができます:

var xml = <list>{ list.toSeq map (n => <number>{n}</number>) }</list> 
+0

ああ、それを得ました。ありがとう! –

+0

実際には、結果に 'Ordering'がないので、新しい' TreeSet'を作成したかどうかは疑問です。おそらく、それは 'Set'に下がりました。デフォルトは' HashSet'です。 –

+0

あなたはもちろんです。修正されました。 –

関連する問題