使用Groovy中的字符串访问地图的元素 [英] Accessing elements of a map of maps using a string in Groovy

查看:142
本文介绍了使用Groovy中的字符串访问地图的元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

鉴于我有一张地图,如:

  def myMap = [b:[c:X]] 

和一个字符串

  def key ='b.c'

我想看到我的选项使用密钥获取值X。



我已经提出了两种实现这一点的方式,但是我对这些解决方案并不满意: / p>

  1)Eval.me(theMap,myMap,theMap。$ key)
2)mayMap。 $ key.split('\\。')[0]。$ key.split('\\。')[1]
pre>

任何人都有更好的方式在Groovy中执行此操作?

解决方案

p>一种方便的方法是使用实​​现Map的 ConfigObject

  def myMap = [b:[c:'X',d:'Y'],a:[n:[m: [x:'Y']]]]作为ConfigObject 
def props = myMap.toProperties ()

assert props ['b.c'] =='X'
assert props.'b.c'=='X'
assert props.'anm x'=='Y'

优点:




  • 没有更多的分裂。

  • 不再评价。


Given I have a map like:

def myMap = [ b : [ c:"X" ] ]

And a string

def key = 'b.c'

I'd like to see my options for using the key to get to the value 'X'.

I have come up with two ways of achieving this myself, but I am not very happy with these solutions:

 1) Eval.me("theMap", myMap, "theMap.$key")
 2) mayMap."$key.split('\\.')[0]"."$key.split('\\.')[1]"

Anyone has a better way of doing this in Groovy?

解决方案

A convenient way is to use ConfigObject which implements Map.

def myMap = [b:[c:'X', d: 'Y'], a:[n:[m:[x:'Y']]]] as ConfigObject
def props = myMap.toProperties()

assert props['b.c'] == 'X'
assert props.'b.c' == 'X'
assert props.'a.n.m.x' == 'Y'

Pros:

  • No more splitting.
  • No more evaluating.

这篇关于使用Groovy中的字符串访问地图的元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆