以下代码不起作用,因为Freemarker似乎将[]中的表达式的值转换为String,然后将其用作键,这不是实际预期的.
准备模板模型:
Map<MyEnum, Object> myMap;
myMap.put(MyEnum.FOO, "Foo");
myMap.put(MyEnum.BAR, "Bar");
templateModel.put("myMap", myMap);
Run Code Online (Sandbox Code Playgroud)
my.ftl:
<#list myMap?keys as key>
<#assign value = myMap[key]>
<li>${key} = ${value}</li>
</#list>
Run Code Online (Sandbox Code Playgroud)
在Freemarker文档中,它描述了如何访问Enum本身,但我没有找到任何关于如何使用Enum作为键从哈希值中获取值的信息.
谢谢.
如何将map
by 传递reference
给函数?Visual Studio 2010给了我一个unresolved externals
错误.目前,我有以下简化代码:
void function1(){
map<int, int> * my_map = new map<int, int>();
function2(*my_map);
}
void function2(map<int, int> &temp_map){
//do stuff with the map
}
Run Code Online (Sandbox Code Playgroud)
这里有类似问题的几个答案,但是他们使用typedef
并添加std::
到定义的开头,但我真的不确定原因.
int ComputerPlayer::getBestMoves(){
//will return the pit number of the best possible move.
//map to hold pit numbers and rankings for each possible pit number.
//map<pitNumber, rank> only adds pit numbers to map if they have seeds in them.
std::map<int, int> possiblePits; //map …
Run Code Online (Sandbox Code Playgroud) 我正在寻找一种方法:
myMap.containsKeyStartingWith("abc"); // returns true if there's a key starting with "abc" e.g. "abcd"
Run Code Online (Sandbox Code Playgroud)
要么
MapUtils.containsKeyStartingWith(myMap, "abc"); // same
Run Code Online (Sandbox Code Playgroud)
我想知道是否有人知道这样做的简单方法
谢谢
在尝试在Scala中创建映射时,我收到以下错误消息:对象映射不是值
我正在使用的代码如下:
val myStringMap = Map[String, String]("first" -> "A", "second" -> "B", "third" -> "C")
Run Code Online (Sandbox Code Playgroud)
我很困惑为什么我不能创建这个地图,因为在查看Scala文档之后,在我看来我的代码的语法是正确的.
我正在尝试使用C++ 11语法初始化STL映射,但这似乎不起作用.初始化后,当我尝试访问该元素时,它会尝试调用Foo的私有构造函数.我错过了什么?如果我使用它,它的工作原理.我想知道我是否可以使用operator []来访问初始值...
#include <map>
#include <string>
class Foo{
public:
int a, b;
Foo(int a_, int b_){
a = a_;
b = b_;
}
private:
Foo(){};
};
int main(){
std::map<std::string, Foo> myMap = { {"1", Foo(10,5)}, {"2", Foo(5,10)} };
int b = myMap["1"].b; // it tries to call private constructor of Foo.
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我正在寻找一种在Ruby中"映射"单个项目的方法.
我想调用这个函数并传递一个块,该对象将被生成块,然后块的结果将返回给调用者.究竟是什么地图,但对于单个元素.
动机是有时你会生成仅用于构造其他东西的对象.然后不再需要原始对象.将转换放入块中并消除临时值会很好.
作为一个人为的例子,让我们假设我想创建一个表示月/年组合的整数.对于今天的日期,代码看起来像:
day = Date.today
month_number = day.year * 100 + day.month
Run Code Online (Sandbox Code Playgroud)
如果我可以这样做,我真的很喜欢它:
month_number = Date.today.some_function { |d| d.year * 100 + d.month }
Run Code Online (Sandbox Code Playgroud)
但我不知道'some_function'是什么(或者它是否存在).
如果有更多的Ruby方式来处理这样的事情,我会全神贯注.我知道猴子修补类,但我希望处理那些更短暂的情况.
我正在尝试优化我的@Entity
课程.让我们来看一个User <-> Group
关系的常见情况.我还想存储建立关系的日期.表格布局:
USER GROUP_USER GROUP
------ ------------ -------
id user_id id
name group_id name
createdAt
Run Code Online (Sandbox Code Playgroud)
有以下3个类:
User
同 @OneToMany List<GroupUser>
GroupUser
用@ManyToOne User
和@ManyToOne Group
Group
同 @OneToMany List<GroupUser>
它有效,但它很常见的常见用例.例如:给我所有组User user
:
List<Group> groups;
for(GroupUser gu : user.getGroupUsers) {
groups.add(gu.getGroup());
}
Run Code Online (Sandbox Code Playgroud)
然后我想到了使用a的Map
想法.所以我创建了以下3个类:
@Entity
class User {
@Column(name="id")
UUID id;
@Column(name="name")
String name;
@ElementCollection
@CollectionTable(name="Group_User")
Map<Group, GroupUserRelationData> groups;
}
@Entity
class Group {
@Column(name="id")
UUID id;
@Column(name="name")
String name;
@ElementCollection …
Run Code Online (Sandbox Code Playgroud) 考虑具有以下签名的函数:
(defn make-widget [& {:keys [x y] :or {x 10 y 20}}]
...)
Run Code Online (Sandbox Code Playgroud)
将地图传递给函数的最佳方法是什么,例如:
(make-widget {:x 100})
Run Code Online (Sandbox Code Playgroud)
要么
(make-widget {:y 200 :x 0})
Run Code Online (Sandbox Code Playgroud)
目前有什么我想到的是通过vec
,flatten
并apply
如:
(apply make-widget (flatten (vec ({:x 100}))
Run Code Online (Sandbox Code Playgroud)
我坚信有更好的方法可以做到这一点.你能考虑一下吗?
我在徘徊 - 我可以std::shared_ptr
用作地图键吗?
更具体地说 - 指针的引用计数器可能与分配给映射时的值不同.
它会在地图中正确识别吗?
使用std::map
或时std::unordered_map
,访问可能不在容器中的元素的首选方法是什么?如果有人请求许可或要求宽恕吗?为什么?
那是,
if (mymap.find(key) != mymap.end()) {
value = mymap.at(key);
// do stuff
}
else {
// do something else
}
Run Code Online (Sandbox Code Playgroud)
与
try {
value = mymap.at(key);
// do stuff
}
catch(const std::out_of_range& oor) {
// do something else
}
Run Code Online (Sandbox Code Playgroud)