问题
I am working with python, and I am implementing my code to c# and in python there is method "product", anyone knows if there is something similar in c#? if not maybe someone can put me on a track of how to write this function by myself?
example of product:
a=[[[(1, 2), (3, 4)], [(5, 6), (7, 8)], [(9, 10), (11, 12)]], [[(13, 14), (15, 16)]]]
b= product(*a)
output:
([(1, 2), (3, 4)], [(13, 14), (15, 16)])
([(5, 6), (7, 8)], [(13, 14), (15, 16)])
([(9, 10), (11, 12)], [(13, 14), (15, 16)])
回答1:
Assuming you mean itertools.product (it looks like it from the example given):
public static List< Tuple<T, T> > Product<T>(List<T> a, List<T> b)
where T : struct
{
List<Tuple<T, T>> result = new List<Tuple<T, T>>();
foreach(T t1 in a)
{
foreach(T t2 in b)
result.Add(Tuple.Create<T, T>(t1, t2));
}
return result;
}
n.b. struct
here means that T
must be a value type or a structure. Change it to class
if you need to throw in objects such as List
s, but be aware of potential referencing issues.
Then as a driver:
List<int> listA = new List<int>() { 1, 2, 3 };
List<int> listB = new List<int>() { 7, 8, 9 };
List<Tuple<int, int>> product = Product<int>(listA, listB);
foreach (Tuple<int, int> tuple in product)
Console.WriteLine(tuple.Item1 + ", " + tuple.Item2);
Output:
1, 7
1, 8
1, 9
2, 7
2, 8
2, 9
3, 7
3, 8
3, 9
回答2:
For a product function valid over number of lists, you can use my CrossProductFunction.CrossProduct
code here:
List<List<Tuple<int>>> a = new List<List<Tuple<int>>> { /*....*/ }
IEnumerable<List<Tuple<int>>> b = CrossProductFunctions.CrossProduct(a)
Currently, it doesn't accept repeat
argument like itertools.product
does, but it is otherwise similar in functionality and design.
回答3:
Here is syntax for writing function in c#:
public void product()
{
..........
.........
}
Link:
http://www.dotnetspider.com/forum/139241-How-write-function-c-.net.aspx
Can get information about all kinds of functions in c# on this link.
来源:https://stackoverflow.com/questions/16586034/product-method-in-c-sharp