Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получение сочетаний из двух массивов. Элементы одного сочетания не из одного м 
:(
    Опции темы
Naum
Дата 23.7.2007, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 743
Регистрация: 7.9.2005
Где: Саратов, ул. Поса дского, 298

Репутация: нет
Всего: 15



Привет, всем!
Вопрос такой: допустим у меня есть два массива с легами (перелет в один конец, например, Москва - Париж).
Код

private ArrayList _legsForward;
private ArrayList _legsBack;

Первый массив - перелеты туда, второй - обратно.
Нужно получить все, возможные флайты (перелет "туда обратно", например, Москва-Париж-Москва), т.е. сочетания по 2 лега. Но они оба должны быть из разных массивов.
Пример:
_legsForward - "leg1", "leg2"
_legsBack - "leg3", "leg4", "leg5".
Результат - _flights - "leg1-leg3", "leg1-leg4", "leg1-leg5", "leg2-leg3", "leg2-leg4", "leg2-leg5".
Я делаю это следующим образом:
Код

public void ConstructFlights()
        {
            int[] iterator = new int[2];
            _flights = new ArrayList();
            while (iterator[0] < _legsForward.Count)
            {
                _flights.Add(new Flight(_legsForward[iterator[0]], _legsBack[iterator[1]]);
                iterator[1] = iterator[1] + 1;
                if (iterator[1] > _legsBack.Count)
                {
                    iterator[0] = iterator[0] + 1;
                    iterator[1] = 0;
                }
            }
        }

Есть ли способ лучше?


--------------------
У нас всего два праздника Новый год и ТЯПница.
PM MAIL ICQ   Вверх
ivashkanet
Дата 23.7.2007, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: нет
Всего: 149



Naum, это был пример запутывания кода? У тебя неплохо получилось.

Я так понял тебе нужно получить все возможные сочетания элемента из первого массива со вторым без всяких проверок.

Так почему бы не использовать вложенные цикл?

Код

public void ConstructFlights()
        {

            _flights = new ArrayList();

            foreach(Leg legFw in legsForward)
            {
                foreach(Leg legBk in legsBack)
                {
                    _flights.Add(new Flight(legFw , legBk);
                }
        }
}

Не проверял, но должно быть то же самое.
PM MAIL WWW ICQ   Вверх
Naum
Дата 23.7.2007, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 743
Регистрация: 7.9.2005
Где: Саратов, ул. Поса дского, 298

Репутация: нет
Всего: 15



ivashkanet, спасибо, но немного не то. Я не сказал еще об одной детали (думал, что неважная оказалась важной). Массивов с легами может быть больше, чем 2. А в flight'е должно содержаться по одному легу из каждого массива. Хотя с foreach'ами и правда попроще. Придумал еще кой-чего, но боюсь, что это опять
Цитата(ivashkanet @  23.7.2007,  12:30 Найти цитируемый пост)
пример запутывания кода

Допустим, вначале сделано так
Код

private ArrayList _legsArrays;//массив массивов легов  :crazy 
private ArrayList _flights;

Получаем
Код

public void ConstructFlight(int legsArrayIndex, Flight flight)
{
   foreach(Leg leg in _legsArrays[legsArrayIndex])
   {
      flight.AddLeg(leg);
      if(legsArrayIndex < _legsArrays.Count)
      {
         ConstructFlight(legsArrayIndex + 1, flight)
      }
      {
         _flights.Add(flight);
      }
   }
}

Есть предложения лучче?  smile 


--------------------
У нас всего два праздника Новый год и ТЯПница.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0414 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.