我正在尝试将数组[(字符串,字符串)] 转换为scala中的 Map [String,String] 。
我正在尝试 toMap 转换为地图。
问题:它正在改变值的顺序。
期望:不应更改订单。
由于
答案 0 :(得分:1)
我认为这会奏效......
AudioListener
类使用哈希表实现可变映射。迭代器和此类的所有遍历方法按插入顺序访问元素。
LinkedHashMap
答案 1 :(得分:0)
评论后:
看起来天真的方法在某种意义上不会起作用,因为键的顺序会被保留。这是一个非常有用的测试脚本来自
for (s <- 1 until 100) {
val keys = (1 to s).map(_.toString).toList
val arr: Array[(String, String)] = keys.map { x => (x, x) }.toArray
val m = arr.toMap
val newKeysOrder = m.map(_._1).toList println (s + ": " + (keys == newKeysOrder))
}
基本上它表明这种做法并不好。
Array(("foo","a"), ("bar", "b"), ("baz", "c")).toList.toMap
但我建议避免使用可变数据结构。
New Anser:
我只想使用scala.collection.immutable.ListMap
中的另一个简单构造:
val m = ListMap(arr:_*)
这是一个测试它是否是o.k的脚本。基本上它适用于前100个整体
for (s <- 1 until 100) {
val keys = (1 to s).map(_.toString).toList
val arr: Array[(String, String)] = keys.map { x => (x, x) }.toArray
val m = ListMap(arr: _*)
val newKeysOrder = m.keys.toList
println(s + ": " + (keys == newKeysOrder))
}
答案 2 :(得分:0)
您可以使用ListMap通过使用基于列表的数据结构来实现不可变映射。
ListMap维护插入顺序并返回ListMap。
1.创建一个数组
val arr=Array(("a","Alice"),("b","Bob"),("c","Cat"),("d","Dog"))
2.创建ListMap
import scala.collection.immutable._
val listMap=arr.foldLeft(ListMap[String,String]())((prev,next)=>prev+(next._1->next._2))
3.它将产生以下输出
listMap: scala.collection.immutable.ListMap[String,String] = Map(a -> Alice, b -> Bob, c -> Cat, d -> Dog)