ruby on rails - Dynamically get all combinations of all elements of arrays -
important: can choose 1 element each array.
i'm writing code let me test quiz permutations. below current hardcoded way return array of possible permutations. need adapt dynamic, there more arrays added later.
i thinking of method accept array of options, , return array of permutations, brain breaks after first loop. appreciated.
options = [ [["geek", "chef", "supporter", "fashionista"]], [["0-1000", "1001-10000", "no limit"]], [["many", "for one"]] ] def test_gifts(options) options.each_with_index |a,index| .... end end
hardcoded way:
character_types = ["geek","chef", "supporter", "fashionista"] price_ranges = ["0-1,000","1,001-10000","no limit"] party_size = ["many", "for one"] permutations = [] character_types.each |type| price_ranges.each |price| party_size.each |party| permutations << [type, price, party] end end end
which returns
[["geek", "0-1,000", "many"], ["geek", "0-1,000", "for one"], ["geek", "1,001-10000", "many"], ["geek", "1,001-10000", "for one"], ["geek", "no limit", "many"], ["geek", "no limit", "for one"], ["chef", "0-1,000", "many"], ["chef", "0-1,000", "for one"], ["chef", "1,001-10000", "many"], ["chef", "1,001-10000", "for one"], ["chef", "no limit", "many"], ["chef", "no limit", "for one"], ["supporter", "0-1,000", "many"], ["supporter", "0-1,000", "for one"], ["supporter", "1,001-10000", "many"], ["supporter", "1,001-10000", "for one"], ["supporter", "no limit", "many"], ["supporter", "no limit", "for one"], ["fashionista", "0-1,000", "many"], ["fashionista", "0-1,000", "for one"], ["fashionista", "1,001-10000", "many"], ["fashionista", "1,001-10000", "for one"], ["fashionista", "no limit", "many"], ["fashionista", "no limit", "for one"]]
use array#product method this:
character_types.product(price_ranges, party_size)
to handle unknown number of other arrays:
arrays_to_permute = [character_types, price_ranges, party_size] first_array, *rest_of_arrays = arrays_to_permute first_array.product(*rest_of_arrays)
Comments
Post a Comment