I like the idea of having a default fill value as well, though if the zip method (maybe different from zip_longest) is defined as a non-static extension method I think it would make sense for the result to have as many rows as 'self' has elements.
On Fri, Oct 2, 2015 at 10:50 AM, Schalk Cronjé <ysb...@gmail.com> wrote: > I like the zip_longest suggestion. > > > On 02/10/2015 14:08, Winnebeck, Jason wrote: > >> As for Dinko's note that transpose is on List -- I don't know how I've >> missed it -- I had been looking for this feature in Groovy a long time >> (under the name of "zip" like it's found in Python). Maybe it's because I >> normally check Iterable and Collection added methods more often than list. >> I would second Schalk's comment about adding a zip function that works with >> Iterable/Iterator. Whether or not it should match with "null" when one >> iterator is longer than the other is up for debate, but both transpose in >> Groovy and zip in Python both ignore any "extra" elements, although there >> is a zip_longest() in Python that takes a "fill value" to use. I'd propose >> the method is defined so any of the following work: >> >> zip(a, b) >> a.zip(b) >> zip(a, b,c,d) >> a.zip(b,c,d) >> >> I think that would be compatible with Groovy extension methods if it's >> defined as: >> >> static <T> Iterable<T> zip(Iterable<? extends T> self, Iterable<? extends >> T>... others) >> >> Jason >> >> -----Original Message----- >> From: Schalk Cronjé [mailto:ysb...@gmail.com] >> Sent: Friday, October 02, 2015 5:22 AM >> To: users@groovy.incubator.apache.org >> Subject: Re: Iterate over 2 lists in a closure? >> >> This thread made me think a zip iterator could be a useful addition to >> the language. >> >> def myList = [1,2,3] >> def myMap = [ a:'b', c:'d', e:'f' ] >> zip(myList,myMap).each { l,m -> println "$l $m" } >> >> Prints out >> 1 a=b >> 2 c=d >> 3 e=f >> >> If one collection is exhausted, whilst the other is not, then just return >> 'null' for the additional items. >> >> >> On 02/10/2015 09:44, Dinko Srkoč wrote: >> >>> On 1 October 2015 at 19:47, Winnebeck, Jason >>> <jason.winneb...@windstream.com> wrote: >>> >>>> [...] >>>> This also sounds like a zip operation, which took me a really long time >>>> to >>>> find in Groovy but I recently found it: >>>> >>>> >>>> >>>> def letters = ['a', 'b'] >>>> def numbers = [1, 2] >>>> >>>> assert ['a1', 'b2'] == >>>> GroovyCollections.transpose(letters, numbers).collect { it[0] >>>> + it[1] >>>> } >>>> >>>> There's an easier way to use `transpose`: >>> >>> assert ['a1', 'b2'] == [letters, numbers].transpose()*.join('') >>> >>> Cheers, >>> Dinko >>> >>> In your case of testing a condition (equality) you can use any method >>>> instead of collect. >>>> >>>> >>>> >>>> Jason >>>> >>>> >>>> >>>> From: Owen Rubel [mailto:oru...@gmail.com] >>>> Sent: Thursday, October 01, 2015 1:28 PM >>>> To: users@groovy.incubator.apache.org >>>> Subject: Re: Iterate over 2 lists in a closure? >>>> >>>> >>>> >>>> if(list1.contains(list2) && list2.contains(list1)){ true } >>>> >>>> >>>> Owen Rubel >>>> 415-971-0976 >>>> oru...@gmail.com >>>> >>>> >>>> >>>> On Thu, Oct 1, 2015 at 10:22 AM, Les Hartzman <lhartz...@gmail.com> >>>> wrote: >>>> >>>> Hi, >>>> >>>> >>>> >>>> I want to know if it's possible to have a closure that can iterate over >>>> 2 >>>> equal length lists? The equivalent of doing list1.each, list2.each { >>>> ... }, >>>> where each list is a list of an user-defined type. >>>> >>>> >>>> >>>> Basically I want to compare elements in the lists to see if they are >>>> equal. >>>> >>>> >>>> >>>> Thanks. >>>> >>>> >>>> >>>> Les >>>> >>>> >>>> >>>> >>>> >>>> ________________________________ >>>> This email message and any attachments are for the sole use of the >>>> intended >>>> recipient(s). Any unauthorized review, use, disclosure or distribution >>>> is >>>> prohibited. If you are not the intended recipient, please contact the >>>> sender >>>> by reply email and destroy all copies of the original message and any >>>> attachments. >>>> >>> >> > > -- > Schalk W. Cronjé > Twitter / Ello / Toeter : @ysb33r > >