Prototype (JavaScript-Framework) eine method zip()
hat, das tut genau das, was Sie brauchen. Das hilft dir aber nicht, ich weiß. Lustig, ich hätte erwartet, dass Groovy etwas Ähnliches hat, aber ich konnte nichts in der Collection
oder List
Klasse finden.
List.metaClass.zip = { List other, Closure cl ->
List result = [];
Iterator left = delegate.iterator();
Iterator right = other.iterator();
while(left.hasNext()&& right.hasNext()){
result.add(
cl.call(left.next(), right.next())
);
}
result;
}
Und hier ist sie in Aktion:
def list1 = [1, 1, 1]
def list2 = [1, 1, 1]
print (list1.zip(list2) {it1, it2 -> it1 + it2})
Ausgang:
Wie auch immer, hier eine nicht allzu ziemlich Implementierung von zip()
ist
[2, 2, 2]
Natürlich können Sie auch in einer weniger generische Art und Weise tun, wenn Sie genau Ihr Problem lösen wollen (und nicht eine allgemeine zip/Map-Funktion zu implementieren):
List.metaClass.addValues = { List other ->
List result = [];
Iterator left = delegate.iterator();
Iterator right = other.iterator();
while(left.hasNext()&& right.hasNext()){
result.add(
left.next() + right.next()
);
}
result;
}
def list1 = [1, 1, 1]
def list2 = [1, 1, 1]
print (list1.addValues(list2))
// Output again: [2, 2, 2]
Mögliche Wiederholung dieser Frage: http://stackoverflow.com/questions/4443557/overloading-operator-for-arrays-in-groovy – Northover