Как это сделать (сортировка {$ a <=> $ b;} @_) [0]; Работа? - PullRequest
2 голосов
/ 18 декабря 2011

Однажды я прочитал следующую подпрограмму Perl

sub min{
  (sort  {$a<=>$b;}  @_)[0];
}

Как понять использование sort и @_ здесь?Что означает [0]?

Ответы [ 2 ]

10 голосов
/ 18 декабря 2011

(...)[0] возвращает первый элемент списка внутри скобок.

Таким образом, ваш пример фактически такой же, как:

sub min{
  my @tmp = sort { $a <=> $b } @_; # sort numerically
  $tmp[0];
}

или

sub min{
  my ($return) = sort { $a <=> $b } @_; # sort numerically
  $return;
}

Я хотел бы отметить еще одну вещь, приведенный выше код крайне неэффективен.Особенно в больших несортированных списках.

Вот более разумный подход:

sub min{
  $min = shift;
  for( @_ ){
    $min = $_ if $_ < $min;
  }
  return $min;
}

Это в основном тот же алгоритм, который используется для Pure Perl версии min в List :: Util .

Вы действительно должны просто использовать min из List :: Util .

3 голосов
/ 18 декабря 2011

Это численно сортирует параметры для подпрограммы (которые находятся в массиве @_) и возвращает первый элемент результата (который находится в [0]).Первый элемент - это минимум всех аргументов.Предполагается, что они все числовые.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...