Я думал, что это было довольно прохладно математика проблемы, но я хотел бы представить себе реальный процесс, так что я написал это для тех, кто хочет проверить , что Servy (ну, Эрик Липперт) писал:
int length = 4;
var lists = new List<List<string>>();
var random = new Random(1234);
for(int i = 0; i < length; i++)
{
var inLength = random.Next(4, 8);
var tempList = new List<string();
for (int j = 0; j < inLength; j++_
{
tempList.Add(string.Format("{{String Coords: {0}, {1}}}", i, j));
}
lists.Add(tempList);
}
var cp= lists.CartesianProduct();
var output = RenderString(cp);
и RenderString
:
private static string RenderString(IEnumerable<IEnumerable<string>> cp)
{
var sb = new StringBuilder();
foreach (var item in cp)
{
sb.AppendLine(item.Aggregate((a, b) => a + b));
}
return sb.ToString();
}
Это даст вам output
, который выглядит как
{String Coords: 0, 0}{String Coords: 1, 0}{String Coords: 2, 0}{String Coords: 3, 0}
{String Coords: 0, 0}{String Coords: 1, 0}{String Coords: 2, 0}{String Coords: 3, 1}
{String Coords: 0, 0}{String Coords: 1, 0}{String Coords: 2, 0}{String Coords: 3, 2}
{String Coords: 0, 0}{String Coords: 1, 0}{String Coords: 2, 0}{String Coords: 3, 3}
{String Coords: 0, 0}{String Coords: 1, 0}{String Coords: 2, 0}{String Coords: 3, 4}
{String Coords: 0, 0}{String Coords: 1, 0}{String Coords: 2, 1}{String Coords: 3, 0}
...
{String Coords: 0, 4}{String Coords: 1, 4}{String Coords: 2, 6}{String Coords: 3, 4}
Довольно прохладно, если вы хотите, чтобы визуализировать то, что происходит.
Можете ли вы опубликовать какой код вы пытались или где он не удалось? – AWinkle
И чтобы уточнить, вы хотите ** комбинации **, а не ** перестановки? ** –
Подсказка: вложенные петли. –