Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ширина каждого столбца, в двумерном массиве 
:(
    Опции темы
amg
Дата 7.4.2007, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

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



Требуется написать эффективную (быструю, с внятным, по возможности кратким кодом) функцию, которая принимает ссылку на таблицу (массив массивов) и возвращает массив с максимальной шириной каждого столбца. Количество элементов в строках таблицы может быть различным. Можно использовать фунцию max (из модуля List::Util, а если этого модуля нет, то и написать ее не сложно).

Эта задача, как мне кажется, имеет достаточно общий интерес (возвращаемый массив можно использовать, например, для красивой печати таблиц с сильно различной шириной колонок). А код, который ниже, в примере, мне не нравится (с внятностью точно проблемы, со скоростью, наверное, тоже).
Код

use List::Util('max');

@a = (['N','Описание', 'Количество', 'Примечание'],
['1', 'Яблоко', '5'],
['2', 'Апельсин', '', 'Грузить бочками'],
['3', 'Киви', '10']);

@max = max_width(\@a);
print "@max\n";

sub max_width {
  my $aref = shift;
  my @max;
  foreach $i (0..max(map {$#{$_}} @$aref)) {
    $max[$i] = max(map {defined && length} map {$_->[$i]} @$aref);
  }
  return @max;
}


PM MAIL   Вверх
Nab
Дата 7.4.2007, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ну вот у меня получился вот такой код:
Код

sub max_width {
  my $aref = shift;
  my ($i, @max);
  foreach my $arr (@$aref) {
    $i = 0;
    map {$max[$i] = length if $max[$i] < length; $i++} @$arr;
  }
  return @max;
}



--------------------
 Чтобы правильно задать вопрос нужно знать больше половины ответа...
Perl Community 
FREESCO in Ukraine 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


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

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


 




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


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

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