List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
Map<String, Object> map = new HashMap<String, Object>();
map.put("abc", "123456");
map.put("def", "hmm");
list.add(map);
JSONObject json = new JSONObject(list);
try {
System.err.println(json.toString(2));
} catch (JSONException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
这段代码出了什么问题?
输出是:
{"empty": false}
Run Code Online (Sandbox Code Playgroud) 在Perl中grep
,map
取一个表达式和一个列表,并计算列表中每个元素的表达式.
两者有什么区别?
Java API返回一个java.util.Map<java.lang.String,java.lang.Boolean>
;.我想把它变成一个Map[String,Boolean]
所以想象我们有:
var scalaMap : Map[String,Boolean] = Map.empty
val javaMap = new JavaClass().map() // Returns java.util.Map<java.lang.String,java.lang.Boolean>
Run Code Online (Sandbox Code Playgroud)
你做不到Map.empty ++ javaMap
,因为++方法不了解Java地图.我试过了:
scalaMap = Map.empty ++ new collection.jcl.MapWrapper[String,Boolean] {
override def underlying = javaMap
}
Run Code Online (Sandbox Code Playgroud)
和:
scalaMap = Map.empty ++ new collection.jcl.MapWrapper[java.lang.String,java.lang.Boolean] {
override def underlying = javaMap
}
Run Code Online (Sandbox Code Playgroud)
这些都无法编译,因为泛型 - java.lang.String
与scala String不同.
有没有一种好方法可以做到这一点,而不是手动复制地图?
编辑:谢谢,所有好的答案,我从他们所有人那里学到了很多东西.但是,我在这里发布一个比我实际拥有的更简单的问题犯了一个错误.所以,如果你允许我,我会概括一个问题 - API实际返回的是什么
java.util.Map<java.lang.String, java.util.Map<SomeJavaEnum,java.lang.String>>
Run Code Online (Sandbox Code Playgroud)
我需要将其移动到Map [String,Map [SomeJavaEnum,String]]
它似乎不太复杂,但它增加了额外级别的类型擦除,我发现将其移动到Scala地图的唯一方法是深度复制它(使用下面建议的一些技术) .任何提示?我通过为我的确切类型定义一个隐式转换来解决我的问题,所以至少丑陋隐藏在它自己的特性中,但仍然感觉有点笨拙的深层复制.
是否可以在C++中使用引用作为标准映射容器中的值?
如果没有 - 为什么不呢?
示例声明:
map<int, SomeStruct&> map_num_to_struct;
Run Code Online (Sandbox Code Playgroud)
用法示例:
...
SomeStruct* some_struct = new SomeStruct();
map_num_to_struct[3] = *some_struct;
map_num_to_struct[3].some_field = 14.3;
cout<<some_struct.some_field;
...
Run Code Online (Sandbox Code Playgroud)
我希望看到14.3印刷......
我只是想知道是否可以在初始化时定义Map对象的内容.
例如,可以创建一个数组,如下所示:
new String[] {“apples”, “bananas”, “pears”}
Run Code Online (Sandbox Code Playgroud)
所以,我想知道我们能为地图做些类似的事情.
我有一个带有byte []键的hashmap.我想通过TreeMap对其进行排序.
为字典顺序执行比较器的最有效方法是什么?
我仍然是一个新手Scala程序员,很抱歉,如果这个问题可能看起来很幼稚,但我搜索了一段时间后发现没有解决方案.我使用的是Scala 2.8,我将PXGivenZ类定义为:
class PXGivenZ (val x:Int, val z:Seq[Int], val values: Map[Seq[Int], Map[Int, Double]] ){...}
Run Code Online (Sandbox Code Playgroud)
当我尝试将该类的元素实例化为另一个程序块时,如下所示:
// x is an Int
// z is a LinkedList of Int
...
var zMap = new HashMap[Seq[Int], HashMap[Int, Double]]
...
val pxgivenz = new PXGivenZ(x, z, zMap)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
found : scala.collection.mutable.HashMap[Seq[Int],scala.collection.mutable.HashMap[Int,Double]]
required: Map[Seq[Int],Map[Int,Double]]
val pxgivenz = new PXGivenZ(x, z, zMap)
^
Run Code Online (Sandbox Code Playgroud)
显然我没有得到:Map [Seq [Int],Map [Int,Double]]与HashMap [Seq [Int],HashMap [Int,Double]]的不同之处是什么?或者"可变"课程出了什么问题?
在此先感谢能帮助我的人!
我想知道哪个更有效率.
std::map< String, std::set<int> >
Run Code Online (Sandbox Code Playgroud)
要么
std::multimap< String, int >
Run Code Online (Sandbox Code Playgroud)
编辑: 我不打算用这些地图做任何与众不同的事情.标准插入,删除,修改,搜索.每个集合或多键字符串的大小不应超过100.
我需要a HashMap
或simpy a Map
,其中固定数量的元素(n)像FIFO队列一样工作.
因此,在元素编号<= n之前,新元素只需放入地图中.
对于元素编号> n,将删除第一个插入的元素,并将最新的元素放入地图中.
Java中有类似的东西,还是我必须实现它?
在Python中,我可以像这样写一个地图文字:
mymap = {"one" : 1, "two" : 2, "three" : 3}
Run Code Online (Sandbox Code Playgroud)
如何在C++ 11中完成等效操作?