为了在模板中使用revel
‘s’
even
关键字,我想在使用进行迭代时获取地图条目的索引range
。有什么办法吗?我的地图具有以下结构:
map[string][]string
您不仅可以使用模板操作来执行此操作,还可以注册一个提供必要帮助的函数。
您可以注册一个返回一个函数(闭包)的函数,该函数在每次调用时都会改变其返回值(确切地说,“奇数”和“偶数”索引的交替方式):
func isEven() func() bool {
e := false
return func() bool {
e = !e
return e
}
}
我将其命名isEven()
为不与ravel的碰撞even()
。使用它:
func main() {
t := template.Must(template.New("").Funcs(template.FuncMap{
"isEven": isEven,
}).Parse(templ))
m := map[string]string{
"a": "A", "b": "B", "c": "C", "d": "D",
}
if err := t.Execute(os.Stdout, m); err != nil {
panic(err)
}
}
const templ = `{{$e := isEven}}
{{- range $k, $v := . -}}
[even:{{call $e}}] key={{$k}}; value={{$v}}
{{end}}`
输出(在Go Playground上尝试):
[even:true] key=a; value=A
[even:false] key=b; value=B
[even:true] key=c; value=C
[even:false] key=d; value=D
如果您希望奇数和偶数迭代具有不同的输出,则可以调用$e
一个{{if}}
动作,如下所示:
const templ = `{{$e := isEven}}
{{- range $k, $v := . -}}
[{{if call $e}}even{{else}}odd {{end}}] key={{$k}}; value={{$v}}
{{end}}`
输出(在Go Playground上尝试):
[even] key=a; value=A
[odd ] key=b; value=B
[even] key=c; value=C
[odd ] key=d; value=D
此模板操作:
{{$e := isEven}}
创建一个名为的新模板变量$e
,其值将是isEven()
函数调用的结果(返回值)。isEven()
返回一个函数值,一个闭包可以访问e
type
的局部变量bool
。稍后再做时{{call $e}}
,您不会调用isEven()
Go函数,而是返回的函数(闭包)并存储在中$e
。该闭包引用了局部bool
变量e
,直到isEvent()
可以访问返回的函数之前,它才“释放”
。
因此,无论何时执行操作{{call $e}}
,它都会调用闭包,该闭包“具有” e
类型的变量bool
,其值在两次调用之间保留$e
。
如果您再次调用isEvent
模板,则将返回一个新函数(闭包),包装一个新的局部变量实例,该实例e
独立于第一次isEvent()
调用返回的闭包的第一个包装变量。
问题内容: List rateList = guestList.stream() .map(guest -> buildRate(ageRate, guestRate, guest)) .collect(Collectors.toList()); 在上面的代码中,可以通过内部方法的索引。我在构建时还需要传递索引,但无法通过获取索引。 问题答案: 您尚未提供的签名,但是我假设您希望首先传递元素的索引
在上面的代码中,是否可以在方法内部传递的索引。在构建时,我还需要传递索引,但无法使用获取索引。
我将“User class”类型的变量转换为JsonNode,如下所示: 我需要迭代地循环该节点的每个元素,并获取其键和值,例如:“name”:John,“lastname”:H等等 但是当我做iterator.next()时,我直接得到约翰值,没有键。我需要同时得到键和值。我如何在JsonNode类型的迭代器中访问键?我做错了什么,或者有没有更好的方法来迭代这些属性?
问题内容: 我正在与Go一起使用MongoDB。我有以下代码: k:0 v:地图[_id:ObjectIdHex(“ 536887c199b6d0510964c35b”)transId:A000000000] 我需要从中获取切片中返回的映射值和的值。我怎样才能做到这一点? 问题答案: 我只是在猜测,但万一您只想检索所有 交易 文档并打印它们,方法如下: 假设您有一个代表您收藏的文件的结构,例如:
问题内容: 我在做: 这引发了ConcurrentModificationException,所以我将其更改为: 此操作以及任何其他修改映射的过程都在同步块中。 有更好的解决方案吗? 如果没有人提出更好的解决方案,那么首先要说“没有” 问题答案: 从Java 8开始,你可以执行以下操作:
问题内容: 可能吗? 说你有 并且是“迈克”,“约翰”,“卡伦”。 是否可以不经过迭代就返回“约翰”的索引是“ 1”? 以下工作正常..与此问题,我想知道是否有更好的方法 问题答案: 该接口并没有像作为一种方法。您确实需要对其进行迭代或使用提供方法的接口代替。 如果你想,转换到是很琐碎,它应该是传递的问题通过的构造函数执行。例如