Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сортировка входных данных JS, Сортировка входных данных 
:(
    Опции темы
sortMePlease
Дата 4.8.2013, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 4.8.2013

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



Приветствую всех. Прошу помочь мне с обработкой входных данных и в дальнейшем с сортировкой. Есть задание: у меня есть катрочки (много), на каждой из них написано по две страны (пункт прибытия/отправки), например:

1) Турция - Монголия; 
2) Китай - ЮАР;
3) ЮАР - Турция;
4) Россия - Китай, и т.д.

 
Т.е. я не знаю начальный и конечный пункт (список в целом неразрывный), но в итоге, методом сортировки, получить следующее:

Россия - Китай
Китай - ЮАР
ЮАР- Турция
Турция - Монголия


Я бы хотел рассмотреть ситуацию, когда мы вводим данные через метод prompt, например: вводим (Россия - Китай) и вводим слова-связки (страны) до тех пор пока не закрываем окно ввода. Только возникает следующие вопросы:
1) Каким образом я должен хранить вводимые данные: создавать в цикле новые переменные или один массив, в который будут добавляся элементы, а дальше сравнивать их? 
2) Ну и сортировка, думаю, что сортировать надо по всей длине слова, а не по первым буквам, иначе при вводе стран могут быть и ситуации, когда мы можем ввести Монголию, Малайзию и прочие страны начинающиеся с одинаковой буквы.
PM MAIL   Вверх
sortMePlease
Дата 4.8.2013, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 4.8.2013

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



Хоть идейку подкинте)
PM MAIL   Вверх
CruorVult
Дата 5.8.2013, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 13
Всего: 28



1) ничерта не понял
2) метод Array.sort адекватно сортирует по всем символам
PM MAIL Skype   Вверх
sortMePlease
Дата 5.8.2013, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 4.8.2013

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



Цитата(CruorVult @  5.8.2013,  08:25 Найти цитируемый пост)
1) ничерта не понял2) метод Array.sort адекватно сортирует по всем символам

Так как у меня количество карточек может быть большим, то я ввожу большое количество стран. И возникает вопрос: как-то, ведь, я должен хранить эти данные (массив, или переменные), чтобы в дальнейшем рассортировать их.

Это сообщение отредактировал(а) sortMePlease - 5.8.2013, 12:58
PM MAIL   Вверх
CruorVult
Дата 5.8.2013, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 13
Всего: 28



Если данных много, то хранить их нужно в массиве!

PM MAIL Skype   Вверх
sortMePlease
Дата 5.8.2013, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 4.8.2013

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



Цитата

Если данных много, то хранить их нужно в массиве!

То есть создаем цикл, в котором будет обновляться содержимое массива?
Можешь пример кода скинуть?

Это сообщение отредактировал(а) sortMePlease - 5.8.2013, 13:44
PM MAIL   Вверх
CruorVult
Дата 5.8.2013, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 13
Всего: 28



Цитата(sortMePlease @  5.8.2013,  13:34 Найти цитируемый пост)
То есть создаем цикл, в котором будет обновляться содержимое массива?


Повторюсь
Цитата(CruorVult @  5.8.2013,  08:25 Найти цитируемый пост)
ничерта не понял


Я не зря это написал. Сформулируй конкретно вопрос без всяких там карточек и промптов. Какие входящие данные, какие действия нужно произвести и что должно получиться в итоге.
PM MAIL Skype   Вверх
sortMePlease
Дата 5.8.2013, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 4.8.2013

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



В целом нужно рассортировать данный список:

1) Турция - Монголия; 
2) Китай - ЮАР;
3) ЮАР - Турция;
4) Россия - Китай, и т.д.

И получить:

Россия - Китай
Китай - ЮАР
ЮАР- Турция
Турция - Монголия


Желательно получить сортировщик, работающий с любым количеством слов-связок (страны), если все они (слова-связки) образуют одну неразрывную цепочку.
user posted image
PM MAIL   Вверх
akizelokro
Дата 6.8.2013, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

Репутация: 2
Всего: 5



Перебором

Код

var ways = [];
var end_ways = [];
ways.pushback({from: "Россия", to:"Китай"});
...
for ( var i = 0; i < ways.length; i++)
{
    var to = ways[i].to;
    for (var j = i + 1; j < ways.length; j++)
    {
        if(ways[j].from.toString() == to.toString())
            ...
    }
}



Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
akizelokro
Дата 6.8.2013, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


Профиль
Группа: Участник
Сообщений: 761
Регистрация: 30.7.2007

Репутация: 2
Всего: 5



В тонкостях разберёшься.

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
CruorVult
Дата 6.8.2013, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 13
Всего: 28



Код

function buildMap(arr, map) {
    
    var current = arr.pop();
    if (!map.length) {
        map.push(current);
    } else {
        var start = map[0];
        var last = map[map.length-1];
        if (current[1] == start[0]) {
            map = [].concat([current], map);
        } else if (current[0] == last[1]) {
            map.push(current);
        } else {
            arr = [].concat([current], arr);
        }
    }
    return arr.length ? buildMap(arr, map) : map;
}


Использование

Код

buildMap([
    ['Турция', 'Монголия'],
    ['Китай', 'ЮАР'],
    ['ЮАР', 'Турция'],
    ['Россия', 'Китай']
], [])


П.С. Если цепочка будет некорректная, то не исключено зацикливание

Это сообщение отредактировал(а) CruorVult - 6.8.2013, 19:14
PM MAIL Skype   Вверх
sortMePlease
Дата 6.8.2013, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 4.8.2013

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




Прокомментируй пожалуйста этот кусок, просто я понмаю это как: если "НЕ" длина массива map, то... 
  
Код

function buildMap(arr, map) {
    

  var current = arr.pop();
    if (!map.length) {
        map.push(current);} 


Код

else {
        var start = map[0];
        var last = map[map.length-1];
        if (current[1] == start[0]) {
            map = [].concat([current], map);
        } else if (current[0] == last[1]) {
            map.push(current);
        } else {
            arr = [].concat([current], arr);
        }
    }
    

Здесь я пытаюсь вывести выходной массив arr, однако он выдал следущее:Турция,Монголия,Китай,ЮАР,ЮАР,Турция.
  
Код

var arrDlina= arr.length;
 return arrDlina, document.write(arr)  ? buildMap(arr, map)  : map;
}
buildMap([
    ['Турция', 'Монголия'],
    ['Китай', 'ЮАР'],
    ['ЮАР', 'Турция'],
    ['Россия', 'Китай']
], [])

</script>
</div>
</body>
</html>



Это сообщение отредактировал(а) sortMePlease - 7.8.2013, 00:01
PM MAIL   Вверх
CruorVult
Дата 7.8.2013, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 13
Всего: 28



Цитата(sortMePlease @  6.8.2013,  21:34 Найти цитируемый пост)
var arrDlina= arr.length;
 return arrDlina, document.write(arr)  ? buildMap(arr, map)  : map;
}


Что это  smile 


Цитата(sortMePlease @  6.8.2013,  21:34 Найти цитируемый пост)
Прокомментируй пожалуйста этот кусок, просто я понмаю это как: если "НЕ" длина массива map, то... 


Код

!1 //false
!5 //false
!0 //true


Я не понимаю, что тебе еще не ясно. Я написал метод, который формирует нужный массив. Все что тебе нужно сделать самому, так это вывести полученные данные любым возможным способом. Если ты и этого сделать не можешь, то прежде чем приступать к решениям таких задач нужно час-другой потратить на освоения основ языка. 
PM MAIL Skype   Вверх
sortMePlease
Дата 7.8.2013, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 4.8.2013

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



CruorVult, благодарю. Прости за тупизм, сейчас разобрался. На счет тернарных операторов: по мере программирования в js почти не сталкивался с ними.
Еще раз спасибо всем, кто участвовал.
PM MAIL   Вверх
skyboy
Дата 8.8.2013, 00:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 10
Всего: 260



конкретный алгоритм не подскажу, но искать надо "поиск цикла в графе".
если у тебя не обязательно все элементы использовать, чтоб найти цикл — это лучше перебора.
если у тебя много элементов — это лучше перебора.
если у тебя есть разветвления — когда из одной страны несколько вариантов — это надежней перебора.
в любом другом случае, понятно, перебор — вполне справится с задачей )
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




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


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

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