Автор Тема: Сортировка массива  (Прочитано 4767 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн tenzors

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 2
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.selena.bryansk.ru
Сортировка массива
« : 02 Апреля 2002, 22:33:19 »
Есть массив с полями Namе,  Price, Old
    $results[1]=(А/касс.LG;  0,25; У.е.)
    $results[2]=(А/касс.GE;  0,25; У.е.)
    $results[3]=(А/касс.SAM; 0,25; У.е.)
Как выполнить сортировку по полю Name, но и
учитывать соседние поля, если значения в поле
Name одинковые. Или сделать сортировку по другому
полю.

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
ээ
« Ответ #1 : 04 Апреля 2002, 12:35:04 »
проще написать отдельную подпрограммку, которая бы разбивала строку, сравнивала нужные поля, и возвращала бы -1, 0 или 1 и это присобачить к ф-ции sort
« Последнее редактирование: 04 Апреля 2002, 12:57:18 от Green Kakadu »
 в исканиях.

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
Пример
« Ответ #2 : 04 Апреля 2002, 12:56:25 »
Во, пример такой сортировки.
Сортируется по именам (2-е поле), если имена совпадают, то сортируется по ID (первое поле)
Имена я использовал английские сами знаете почему - если нужны русские, то читайте тут FAQ и включайте locale


#!/usr/bin/perl -w

my @array =( \'1;Pete;Red\',
             \'7;Mike;Green\',
             \'9;Barry;Red\',
             \'3;Ann;Blue\',
             \'2;Merry;Green\',
             \'11;Pete;Pink\');
             
map {print "$_\\n"} sort by_field(@array);
             
sub by_field {
   my @a=split(/;/, $a);
   my @b=split(/;/,$b);
   ($a[1] cmp $b[1])||($a[0] <=> $b[0]);
}   


Результат:
3;Ann;Blue
9;Barry;Red
2;Merry;Green
7;Mike;Green
1;Pete;Red
11;Pete;Pink
 в исканиях.

Оффлайн tenzors

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 2
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.selena.bryansk.ru
Сортировка массива
« Ответ #3 : 06 Апреля 2002, 00:23:11 »
Спасибо

Ленивый гость

  • Гость
Сортировка массива
« Ответ #4 : 28 Сентября 2002, 00:31:46 »
Подскажите еще чего-нибудь?
Можно еще примерчик

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Сортировка массива
« Ответ #5 : 28 Сентября 2002, 14:37:14 »
Цитировать
Подскажите еще чего-нибудь?

А что не понятно???
The documentations is your friend

Ленивый гость

  • Гость
Сортировка массива
« Ответ #6 : 28 Сентября 2002, 16:16:52 »
my @array =(
\'12;Pete;X\',
\'1;Pete;Red\',
\'7;Mike;Green\',
\'9;Barry;Red\',
\'3;Ann;Blue\',
\'2;Merry;Green\',
\'11;Pete;Pink\');


@array=sort{($a=~m/;(.+);/)[0] cmp ($b=~m/;(.+);/)[0]
or ($a=~m/^(\\d+)/)[0] <=> ($b=~m/^(\\d+)/)[0] }@array;

print join "\\n",@array;

Ленивый гость

  • Гость
Сортировка массива
« Ответ #7 : 28 Сентября 2002, 16:52:22 »
my @array =(
\'12;Pete;X\',
\'1;Pete;Red\',
\'7;Mike;Green\',
\'9;Barry;Red\',
\'3;Ann;Blue\',
\'2;Merry;Green\',
\'11;Pete;Pink\');


@array=sort{(split /;/,$a)[1] cmp (split /;/,$b)[1] or
(split /;/,$a)[0] <=> (split /;/,$b)[0]}@array;

print join "\\n",@array;

Оффлайн Serchey

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 216
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.rivne.ukrtelecom.ua
Сортировка массива
« Ответ #8 : 28 Сентября 2002, 17:20:33 »
Цитировать
or
- не привильнее было-бы ||?

Ленивый гость

  • Гость
Сортировка массива
« Ответ #9 : 28 Сентября 2002, 18:37:31 »
Цитировать
не привильнее было-бы ||?


нет

Оффлайн Serchey

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 216
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.rivne.ukrtelecom.ua
Сортировка массива
« Ответ #10 : 28 Сентября 2002, 21:34:07 »
Правильно - без разницы!

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28