Forum Discussion

lmgibs04's avatar
lmgibs04
Regular Visitor
2 years ago
Solved

Cartesian Product of String Lists in M

  Hello Everyone,    I'm looking to create a cartesian product of two lists of strings through a function in M. Imagine I have lists {"a","b","c"} and {"1","2","3"} and I want to create a list...
  • Vijay_A_Verma's avatar
    2 years ago

    You may use this

    let
    list1 = {"a", "b", "c", "d"},
    list2 = {1, 2, 3}
    in
    List.Split(List.TransformMany(list2, (x)=>list1, (x,y)=> y & Text.From(x)), List.Count(list1))
  • Anonymous's avatar
    Anonymous
    2 years ago

    Hi lmgibs04 ,

    Vijay_A_Verma Good Answer!
    And you can also try this:

     

    let
        List1 = {"a", "b", "c"},
        List2 = {"1", "2", "3"},
        Product = List.Transform(List2, each let currentItem = _ in List.Transform(List1, each _ & currentItem)),
        Result = List.Zip(Product),
        #"Converted to Table" = Table.FromList(Result, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
        #"Extracted Values" = Table.TransformColumns(#"Converted to Table", {"Column1", each Text.Combine(List.Transform(_, Text.From), "#(tab)"), type text}),
        #"Split Column by Delimiter" = Table.SplitColumn(#"Extracted Values", "Column1", Splitter.SplitTextByDelimiter("#(tab)", QuoteStyle.Csv), {"Column1.1", "Column1.2", "Column1.3"}),
        #"Changed Type" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Column1.1", type text}, {"Column1.2", type text}, {"Column1.3", type text}})
    in
        #"Changed Type"

     

    Just put all of this M function into Advanced Editor, and the final output is as below:


    Best Regards,
    Dino Tao
    If this post helps, then please consider Accept both of our answers as the solution to help the other members find it more quickly.