出于某种原因,我只是从mac中的couchdb中的map/reduce结果中获取一个null键
结果:
{"rows":[
{"key":null,"value":2224}
]}
Run Code Online (Sandbox Code Playgroud)
我使用couchapp v8.1和couchdb v1.0.2
我的地图功能是:
function(doc) {
emit(doc.doc_type, 1);
}
Run Code Online (Sandbox Code Playgroud)
我的reduce函数是:
function(key, values, rereducer) {
return sum(values);
}
Run Code Online (Sandbox Code Playgroud)
结果我期待:
{"rows":[
{"key":"type1","value":22}
{"key":"type2","value":32}
{"key":"type3","value":25}
//snip snip
]}
Run Code Online (Sandbox Code Playgroud)
知道我哪里错了吗?
我们目前正在使用Guava作为其不可变的集合,但我很惊讶地发现他们的地图没有方法可以轻松创建新的地图并进行微小的修改.最重要的是,他们的构建器不允许为键分配新值或删除键.
因此,如果我只想修改一个值,这就是我希望能够做到的:
ImmutableMap<Guid, ImmutableMap<String, Integer>> originalMap = /* get the map */;
ImmutableMap<Guid, ImmutableMap<String, Integer>> modifiedMap =
originalMap.cloneAndPut(key, value);
Run Code Online (Sandbox Code Playgroud)
这就是Guava期待我做的事情:
ImmutableMap<Guid, ImmutableMap<String, Integer>> originalMap = /* get the map */;
Map<Guid, ImmutableMap<String, Integer>> mutableCopy = new LinkedHashMap<>(originalMap);
mutableCopy.put(key, value);
originalMap = ImmutableMap.copyOf(mutableCopy);
/* put the map back */
Run Code Online (Sandbox Code Playgroud)
通过这样做,我得到了我想要的修改的地图的新副本.原始副本不受影响,我将使用原子引用将事物放回去,因此整个设置是线程安全的.
这很慢.
这里有很多浪费的复制品.假设地图中有1,024个桶.当你可以按原样使用那些不可变的桶并且只克隆其中一个时,那就是你不必要地重新创建的1,023个桶(也是每个两次).
所以我想:
是否有一种Guava实用方法埋在某处用于此类事情?(它不在地图或ImmutableMap.Builder中.)
有没有其他Java库可以做到这一点?我的印象是Clojure有这样的东西但我们还没准备好转换语言......
我们可以为iOS中的用户当前位置设置自定义注释视图吗?
我需要用我自己的自定义视图(比如一些ping引脚)删除蓝点(带圆圈).是否有可能做到这一点?
如果我们这样做,当用户位置发生变化时,此引脚是否会移动到新位置?或者我们需要以编程方式处理它吗?
我观察到如果我们对用户的当前位置使用默认蓝点,那么当用户位置发生变化时,它会在地图中更新.
我只想知道是否可以使用我们自己的自定义视图完成此操作.
我有一张clojure地图.说出来opts
.我知道从这个地图获取值的两种方法,如果没有键获得一些默认值:
(let [opts {}
title-1 (or (:title opts) "Default title")
title-2 (:title opts "Default title")]
(println title-1 title-2))
Run Code Online (Sandbox Code Playgroud)
我看到一些库(quil,incanter)使用第一种方法or
.在我看来,第二种方法更简洁,更清洁.第一种方法有优势吗?
使用的缺点(or (:title opts) "Default value")
是我们不能再传递false
和nil
作为值,在这种情况下总是使用默认值.
如果我有以下定义:
typedef map<string, Foo> Foo_map_1
typedef map<string, Foo_map_1> Foo_map_2
typedef map<string, Foo_map_2> Foo_map_3
typedef map<string, Foo_map_3> Foo_map_4
typedef map<string, Foo_map_4> Foo_map_5
Run Code Online (Sandbox Code Playgroud)
无论如何,我可以概括一下,所以我可以做,例如,
Foo_map<10>
Run Code Online (Sandbox Code Playgroud)
并有一个10倍的嵌套地图.我不需要像是boost::recursive_wrapper
因为级别的数量总是不变的.
尝试map::compare
使用lambda 覆盖函数,似乎以下解决方案有效.
auto cmp = [](const int&a, const int& b) { return a < b; };
std::map<int, int, decltype(cmp)> myMap(cmp);
Run Code Online (Sandbox Code Playgroud)
但是,我必须先定义cmp
并稍后再使用它.
我可以在没有定义'cmp'的情况下这样做吗?
我想Map<String, List<String>>
在Java中实例化,
我试过了
Map<String, List<String>> foo = new <String, List<String>>();
Run Code Online (Sandbox Code Playgroud)
和
Map<String, List<String>> foo = new <String, ArrayList<String>>();
Run Code Online (Sandbox Code Playgroud)
他们都没有工作.有没有人知道如何在Java中实例化这个地图?
我有一张地图用于存储动态数据,这些数据一旦被创建就被丢弃(即使用;它们被快速消耗).它响应用户交互,因为当用户点击按钮时,地图被填充,然后数据用于做一些工作,然后不再需要地图.
所以我的问题是什么是更好的清空地图的方法?我应该每次都设置为null还是应该打电话clear()
?我知道清楚是线性的.但我不知道如何将这个成本与每次创建地图的成本进行比较.地图的大小不是恒定的,因为它可能在创作之间从n到3n元素运行.