我正在Fantom language中编写一个Web应用程序,并使用afMongo来访问Mongo数据库实例。按照afMongo文档中的示例,我得到了我需要迭代的查询结果。在一个简化的例子中,迭代看起来像这样
class MapListIterator {
Void main(){
[Str:Obj?][] listOfMaps := [,]
listOfMaps.add(
["12345":[
"id":12345,
"code":"AU",
"name":"Australia"
]])
listOfMaps.each |Str:Obj? map| {
echo(map.keys)
keys := map.keys
keys.each {
echo(it)
echo(((Str:Obj?)map[it])["code"])
echo(((Str:Obj?)map[it])["name"])
}
}
}
}
我在Fantom online playground中运行了这段代码并且它运行正常,但我想知道它是否是一种更简洁的迭代结果的方法。我不喜欢上面代码中的转换。另外,有没有更好的方法来编写嵌套的it-block?
修改
事实证明我过于复杂。这是应用史蒂夫建议后代码的样子:
Str:Country mapOfCountries := [:]
mapOfCountries.ordered = true
listOfMaps := ([Str:Str?][]) collection.findAll
listOfMaps.each {
c := it["code"]
n := it["name"]
mapOfCountries.add(c, Country { code = c ; name = n })
}
答案 0 :(得分:1)
我会重新投射结果并在早期分配地图......这给出了:
listOfMappedMaps := ([Str:[Str:Obj?]][]) listOfMaps
listOfMappedMaps.each {
map := it
map.keys.each {
echo(map[it]["code"])
echo(map[it]["name"])
}
}
下一步是使用Morphia,它允许您使用对象代替地图。