У меня есть массив строк, может быть любой длины. Как я могу создать логическую матрицу (массив массива логических значений с той же шириной, что и массив строк), который содержит все комбинации булевых элементов?Все комбинации булевых значений для массива
Результат должен выглядеть как этот
0 0 0 0
0 0 0 1
0 0 1 0
0 0 1 1
0 1 0 0
.
.
1 1 1 1
Edit: Выработать немного, это является частью решения более серьезной проблемой для создания динамического SQL для обработки, где условие оговорки по нескольким таблицам, каждый с 2 версии. В моей попытке сузить вопрос, я согласен, что, возможно, был слишком краток, извиняюсь.
Это то, что я закончил с помощью JamJar00.
var sWhere = TranslateCriteriaToSQL(oUoW, oCriteria, false, false, DataBaseID, User);
var sResult = "";
var tables = asTables.ToArray();
int n = tables.Length;
List<bool[]> matrix = new List<bool[]>();
double count = Math.Pow(2, n);
for (int i = 0; i < count; i++)
{
string str = Convert.ToString(i, 2).PadLeft(n, '0');
bool[] boolArr = str.Select((x) => x == '1').ToArray();
var sCondition = sWhere;
for (var j = 0; j < boolArr.Length; j++)
{
if (boolArr[j])
{
sCondition = " OR (" + sCondition.Replace("[" + tables[j] + "]", "[" + tables[j] + "Pending" + "]") +
")\n";
}
}
sResult += sCondition;
}
}
Вы уверены, что вам нужно булево массив? Разве битмаски не хватит? – soon
Любое представление будет работать. Также было бы нормально циклически перебирать все перестановки по одному, т. Е. Подпрограмму, которая просто дает следующую перестановку и какой-то показатель, если все будет хорошо, то есть мы закончили. – aggaton
У вас есть 2^n возможных значений. Это может быть очень большой массив. –