在Groovy中配对<L,R>

450*_*50F 7 groovy

Groovy是否支持Pairs(例如来自Java或C++)?如果没有,那么解决这个问题的好方法是什么?

Ger*_*oth 10

Groovy支持使用该类的对Tuple2.

使用的一个小例子Tuple2:

def m = [a: new Tuple2(1, 2)]

m.b = new Tuple2('1', '2')

assert m.a.first == 1
assert m.a.second == 2

assert m.b.first == '1'
assert m.b.second == '2'
Run Code Online (Sandbox Code Playgroud)

您也可以使用Map以下值来实现或多或少相同:

def n = [a: [first: 1, second: 2]]
n.b = [first: '1', second: '2']

assert n.a.first == 1
assert n.a.second == 2

assert n.b.first == '1'
assert n.b.second == '2'
Run Code Online (Sandbox Code Playgroud)


Nat*_*hes 6

根据Gergely的回答, Groovy有一个Tuple2类.

但是,使用可能更容易的Pair或tuple的替代方法; Groovy支持一种称为多重赋值的功能,您可以在其中将数组或列表的成员分配给不同的变量:

groovy:000> (a, b) = [1, 2]
===> [1, 2]
groovy:000> a
===> 1
groovy:000> b
===> 2
Run Code Online (Sandbox Code Playgroud)

变量不必具有相同的类型.

所以,你可以从一个方法调用返回两个条目列表,然后让调用它们分配给不同的变量,并没有涉及任何一种像一对或者Tuple2专门的容器,你不得不从它解压值.

如果你想要一个明确定义的合同,那就去你自己的班级.或者使用Map,这样您至少可以使用键为返回的不同内容指定名称.

使用Tuple2或Pair对列表的顺序敏感,在命名方面是零改进,并添加额外的样板代码来打包和解包.