C# 从2D数组中获取所有组合
我有一个2d数组,我想得到所有可能的组合。但我被困在如何做到这一点上了。我的数据数组如下所示:C# 从2D数组中获取所有组合,c#,combinations,permutation,C#,Combinations,Permutation,我有一个2d数组,我想得到所有可能的组合。但我被困在如何做到这一点上了。我的数据数组如下所示: var data = new string[][] { new string[] {"pa", "ga", "ka"}, new string[] {"pb", "gb", "kb"} }; pa ga ka pa ga kb pa gb ka pa gb kb pb ga ka pb g
var data = new string[][]
{
new string[] {"pa", "ga", "ka"},
new string[] {"pb", "gb", "kb"}
};
pa ga ka
pa ga kb
pa gb ka
pa gb kb
pb ga ka
pb ga kb
pb gb ka
pb gb kb
我的预期输出如下:
var data = new string[][]
{
new string[] {"pa", "ga", "ka"},
new string[] {"pb", "gb", "kb"}
};
pa ga ka
pa ga kb
pa gb ka
pa gb kb
pb ga ka
pb ga kb
pb gb ka
pb gb kb
顺序也很重要。例如,我不能使组合ga-pa-ka。因为第一个项目需要以p开头,第二个项目需要以g开头,第三个项目需要以k开头。因此,我不能使用笛卡尔积
注意:在这个例子中,我有两行。也可能我有更多的行 var data=新字符串[][]
var data = new string[][]
{
new string[] {"pa", "ga", "ka"},
new string[] {"pb", "gb", "kb"}
};
foreach(var first in data[0])
{
foreach(var second in data[1])
{
List<string> list = new List<string>(data[1]);
list.Remove(second);
var arrayList=list.ToArray();
string[] myArray = new string[3];
myArray[0] = first;
myArray[1] = arrayList[0];
myArray[2] = arrayList[1];
Console.WriteLine("{0}", string.Join(" ", myArray));
}
}
{
新字符串[]{“pa”、“ga”、“ka”},
新字符串[]{“pb”、“gb”、“kb”}
};
foreach(数据[0]中的var第一个)
{
foreach(数据[1]中的第二个变量)
{
列表=新列表(数据[1]);
列表。删除(第二个);
var arrayList=list.ToArray();
字符串[]myArray=新字符串[3];
myArray[0]=第一个;
myArray[1]=arrayList[0];
myArray[2]=arrayList[1];
Console.WriteLine(“{0}”,string.Join(“,myArray));
}
}
您可以使用Eric Lippert的解决方案,但首先需要转换输入
这里有一个转置方法:
此操作的输出为:
pa, ga, ka
pa, ga, kb
pa, gb, ka
pa, gb, kb
pb, ga, ka
pb, ga, kb
pb, gb, ka
pb, gb, kb
你的具体要求是什么。特别是,看看(如果你对所有血淋淋的细节感兴趣,请阅读他提到的博客)。你确定这是重复的吗?在我的例子中,我只有两行来保持简单。但也有可能我有更多的行。我很确定-Eric的回答包含一个
IEnumerable
,这意味着你可以向它传递任意数量的数组。顺序对我来说也很重要。例如,对于Eric的答案,我从var data=new string[]{new string[]{“1”、“2”、“3”},new string[]{“x”、“y”、“z”};var x=data.CartesianProduct();1y的组合。这在我的情况下是不能用的。
pa, ga, ka
pa, ga, kb
pa, gb, ka
pa, gb, kb
pb, ga, ka
pb, ga, kb
pb, gb, ka
pb, gb, kb