ih8write
@ih8write
более,чем все

Как сгруппировать элементы двух массивов используя несколько правил (сложные условия)?

День добрый.
Столкнулся с составлением сложных условий и окончательно запутался и сломал "лыжи"(они не едут). Есть два массива:
string[] template = { "C", "F", "D", "J", "K", "A", "R", "W" };//шаблон для сравнения и группировки 
string[] array =    { "C", "D", "F", "J", "K", "A", "W", "R" }; //тот из которого надо составить группы

Пытаюсь привести группу из array[], к следующему виду:
  1. "C" - это первая группа
  2. "D", "F" - вторая группа,так как в template,эти элементы поменялись местами
  3. "J", "K" - третья группа,так как в template,эти элементы не поменялись местами
  4. "K", "A" - четвертая группа,в template,эти элементы не поменялись местами
  5. "W", "R" - пятая группа,в template,эти элементы поменялись местами,но стоят рядом

Вот собственно код,в котором я запутался клубком(прошу не пинать по клубку,я учусь):
List<string> list = new List<string>();
string[] template = { "C", "F", "D", "J", "K", "A", "R", "W" };//шаблон для сравнения и группировки 
string[] array =    { "C", "D", "F", "J", "K", "A", "W", "R" }; //тот из которого надо составить группы

            bool g1 = (array[1] == template[0] || array[1] == template[1]);
            bool g1_1 = (array[1] == template[2]);
/*-------------------------------------------------------------------------------------------------*/
            bool g2 = (array[2] == template[1] || array[2] == template[2]);
            bool g2_1 = (array[2] == template[3]);
/*-------------------------------------------------------------------------------------------------*/
            bool g3 = (array[3]==template[2]||array[3]==template[3]);
            bool g3_1 = (array[3] == template[4]);
/*-----------------------------------------------------------------------------------------------------*/
            bool g4 = (array[4] == template[3] || array[4] == template[4]);
            bool g4_1 = (array[4] == template[5]);
/*----------------------------------------------------------------------------------------------------*/
            bool g5 = (array[5] == template[4] || array[5] == template[5]);
            bool g5_1 = (array[5] == template[6]);
/*--------------------------------------------------------------------------------------------------*/
            bool g6 = (array[6] == template[5] || array[6] == template[6]);
            bool g6_1 = (array[6] == template[7]);
/*--------------------------------------------------------------------------------------------------*/
            bool g7 = (array[7] == template[6] || array[7] == template[7]);

            list.Add(array[0]);

            if (g1) { list.Add(array[1]);} 
            if (g1_1 & g2) { list.Add(array[1] + "-" + array[2]); }
            if (g2_1 & g3) { list.Add(array[2] + "-" + array[3]); }
            if (g3_1 & g4) { list.Add(array[3] + "-" + array[4]); }
  • Вопрос задан
  • 2437 просмотров
Пригласить эксперта
Ответы на вопрос 1
@AigizK
Ну для начала надо составить алгоритм. Если не ошибся,он у вас такой:
1. В цикле пробегаемся по элементам.
2. Берем текущий элемент и следующий из template и текущий элемент и следующий из array
3. Если в них содержатся одни и те же буквы, то создаем группы, порядок не важен
4. Если разные, то сравниваем текущую букву из template и array. Если они равны, то создаем группу.

Но тогда один момент не понятен, почему после 4 вашего шага не создается группа только из буквы "А"?
Вполне возможно действует одно из ограничений:
1. если буква использовалась в другой группе, то на основе него нельзя создать отдельную группу
2. если буква не в начале слова, то нельзя создать группу только из 1 элемента
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы