Cartesian product of two or more lists: Difference between revisions
Content deleted Content added
m →{{header|Groovy}}: cosmetic changes |
|||
Line 3,172: | Line 3,172: | ||
</pre> |
</pre> |
||
=={{header|Visual Basic .NET}}== |
|||
{{trans|C#}} |
|||
<lang vbnet>Imports System.Runtime.CompilerServices |
|||
Module Module1 |
|||
<Extension()> |
|||
Function CartesianProduct(Of T)(sequences As IEnumerable(Of IEnumerable(Of T))) As IEnumerable(Of IEnumerable(Of T)) |
|||
Dim emptyProduct As IEnumerable(Of IEnumerable(Of T)) = {Enumerable.Empty(Of T)} |
|||
Return sequences.Aggregate(emptyProduct, Function(accumulator, sequence) From acc In accumulator From item In sequence Select acc.Concat({item})) |
|||
End Function |
|||
Sub Main() |
|||
Dim empty(-1) As Integer |
|||
Dim list1 = {1, 2} |
|||
Dim list2 = {3, 4} |
|||
Dim list3 = {1776, 1789} |
|||
Dim list4 = {7, 12} |
|||
Dim list5 = {4, 14, 23} |
|||
Dim list6 = {0, 1} |
|||
Dim list7 = {1, 2, 3} |
|||
Dim list8 = {30} |
|||
Dim list9 = {500, 100} |
|||
For Each sequnceList As Integer()() In { |
|||
({list1, list2}), |
|||
({list2, list1}), |
|||
({list1, empty}), |
|||
({empty, list1}), |
|||
({list3, list4, list5, list6}), |
|||
({list7, list8, list9}), |
|||
({list7, empty, list9}) |
|||
} |
|||
Dim cart = sequnceList.CartesianProduct().Select(Function(tuple) $"({String.Join(", ", tuple)})") |
|||
Console.WriteLine($"{{{String.Join(", ", cart)}}}") |
|||
Next |
|||
End Sub |
|||
End Module</lang> |
|||
{{out}} |
|||
<pre>{(1, 3), (1, 4), (2, 3), (2, 4)} |
|||
{(3, 1), (3, 2), (4, 1), (4, 2)} |
|||
{} |
|||
{} |
|||
{(1776, 7, 4, 0), (1776, 7, 4, 1), (1776, 7, 14, 0), (1776, 7, 14, 1), (1776, 7, 23, 0), (1776, 7, 23, 1), (1776, 12, 4, 0), (1776, 12, 4, 1), (1776, 12, 14, 0), (1776, 12, 14, 1), (1776, 12, 23, 0), (1776, 12, 23, 1), (1789, 7, 4, 0), (1789, 7, 4, 1), (1789, 7, 14, 0), (1789, 7, 14, 1), (1789, 7, 23, 0), (1789, 7, 23, 1), (1789, 12, 4, 0), (1789, 12, 4, 1), (1789, 12, 14, 0), (1789, 12, 14, 1), (1789, 12, 23, 0), (1789, 12, 23, 1)} |
|||
{(1, 30, 500), (1, 30, 100), (2, 30, 500), (2, 30, 100), (3, 30, 500), (3, 30, 100)} |
|||
{}</pre> |
|||
=={{header|zkl}}== |
=={{header|zkl}}== |