Ejemplo con tres arrays de dos elementos cada uno para simplificar. a = [ 'uno', 'dos' ] b = [ 'tres', 'cuatro' ] c = [ 'cinco', 'seis' ] Supongamos que lo que vos querés es armar arrays con elementos de a, b, y c, pero los de b son opcionales. Lo primero, agregá un nil a b b << nil Ahora, si hacés a.product(b,c) te va a devolver [["uno", "tres", "cinco"], ["uno", "tres", "seis"], ["uno", "cuatro", "cinco"], ["uno", "cuatro", "seis"], ["uno", nil, "cinco"], ["uno", nil, "seis"], ["dos", "tres", "cinco"], ["dos", "tres", "seis"], ["dos", "cuatro", "cinco"], ["dos", "cuatro", "seis"], ["dos", nil, "cinco"], ["dos", nil, "seis"]] Si te fijás, unos cuantos de esos tienen nil en el medio -- esos son los que no llevan el elemento de b. Así que lo pasás por compact para eliminar los nils: a.product(b,c).map(&:compact) Te va a devolver exactamente lo que querés
2009/10/6 Julian Porta <[email protected]>: > Uh. No era para Lucas, sino para Nacho. > perdonen por el quilombo > > 2009/10/6 Julian Porta <[email protected]> >> >> Perdón, Lucas, pero no termino de entender (empecé con ruby la semana >> pasada) >> Será mucha molestia si te pido que te extiendas un poco en el proceso que >> describis? >> Creo que entiendo la idea pero me pierdo en la implementación >> Porta. >> >> 2009/10/6 Nacho Facello <[email protected]> >>> >>> 2009/10/6 Lucas Sallovitz <[email protected]>: >>> > 2009/10/6 Porta <[email protected]> >>> >> >>> >> Buenas. >>> >> Tengo un problemita que me esta trastornando y no le encuentro la >>> >> vuelta. >>> >> >>> > >>> > Algo así: >>> > >>> > arrays_obligatorios = { { }, { }, ... } >>> > arrays_opcionales = { { }, { }, ...} >>> > >>> > n = arrays_opcionales.size ^ 2 >>> > i = de 0 a n >>> > arrays = arrays_obligatorios + arrays_opcionales.filter { el bit de i >>> > correspondiente al índice es 1 } >>> > resultado << arrays.producto_cartesiano >>> >>> Yo usaría Array#product combinado con una pisadita para los >>> opcionales: agregale a los opcionales un elemento nil. >>> Después tenés a.product(b, c, d), y vas a tener los arrays armaditos, >>> con un nil donde no va nada porque es opcional, y ahí le hacés un >>> map(&:compact) y chau. >>> >>> -- >>> Nacho Facello >>> :wq >>> _______________________________________________ >>> Ruby mailing list >>> [email protected] >>> http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar >> > > > _______________________________________________ > Ruby mailing list > [email protected] > http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar > > -- Nacho Facello :wq _______________________________________________ Ruby mailing list [email protected] http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar
