Я работаю над созданием списка строковых массивов, закрытых объединением, что означает, что объединение любых двух массивов должно присутствовать в полном списке.
Для этого я написал свой собственный код, который выполняет итерациюсписок строковых массивов и добавление новых строковых массивов, которые являются объединением двух существующих строковых массивов списка, только когда новый массив еще не существует в списке.
public static List<string[]> UnionClosed(List<string[]> kstructure)
{
for (int i = 1; i < kstructure.Count; i++)
{
for (int j = i + 1; j < kstructure.Count; j++)
{
string[] kstate1 = kstructure[i];
string[] kstate2 = kstructure[j];
string[] unionStatesResult = kstate1.Union(kstate2).ToArray();
int flag = 0;
for (int k = 1; k < kstructure.Count; k++)
{
if (kstructure[k].Length == unionStatesResult.Length && kstructure[k].Intersect(unionStatesResult).Count()==kstructure[k].Length)
{
flag = flag + 1;
break;
}
}
if (flag==0)
{
kstructure.Add(unionStatesResult);
}
}
}
return (kstructure);
}
Ожидаемый результатчтобы получить список строковых массивов, которые закрыты при объединении.
Например, если я передам ввод: {{}, {"i1"}, {"i2"}, {"i3"}, {"i4"}, {"i1", "i2"}, {"i1", "i3"}, {"i1", "i4"}, {"i1", "i5"}, {"i2","i3"}, {"i2", "i4"}, {"i2", "i5"}, {"i1", "i2", "i3"}, {"i1", "i2", "i4"}, {" i1 "," i2 "," i5 "}, {" i1 "," i3 "," i4 "}, {" i1 "," i3 "," i5 "}, {" i2 ","i3", "i4"}, {"i2", "i3", "i5"}, {"i1", "i2", "i3", "i4"}, {"i1", "i2","i3", "i5"}, {"i1", "i3", "i4", "i5"}, {"i1", "i2", "i3", "i4", "i5"}}.
Тогда ожидаемый результат должен быть: {{}, {"i1"}, {"i2"}, {"i3"}, {"i4"}, {"i1", "i2"}, {"i1", "i3"}, {"i1", "i4"}, {"i1", "i5"}, {"i2", "i3"}, {"i2", "i4"}, {"i2", "i5"}, {"i3", "i4"}, {"i1", "i2", "i3"}, {"i1", "i2", "i4"}, {"i1", "i2", "i5"}, {"i1", "i3", "i4"}, {"i1", "i3", "i5"}, {"i1", "i4","i5"}, {"i2", "i3", "i4"}, {"i2", "i3", "i5"}, {"i2", "i4", "i5"}, {"i1"," i2 "," i3 "," i4 "}, {" i1 "," i2 "," i3 "," i5 "}, {" i1 "," i2 "," i4 "," i5 "}, {"i1", "i3", "i4", "i5"}, {"i2", "i3", "i4", "i5"}, {"i1", "i2", "i3","i4", "i5"}}.
Я получаю вывод, но проблема в том, что он очень медленный и не дает результата для большого числа строковых массивов.Я хотел, чтобы список размером 500 был закрыт при объединении, но этот код не дал мне результата. Я хочу знать, есть ли какая-либо функция c # для того же.В пакете R sets предусмотрены те же функции, что и в методе binary_closure ().Я хочу то же самое в C #.