我需要按@list
订购insertDate
数组,但是如何才能访问它,因为它是$obj
数组?
我尝试了Perl的sort
功能,但我不了解这种由$obj
组成的数组是如何工作的。
sub getLastQuestions {
my ($page) = @_;
$page ||= 1;
my $questionPerPage = 30;
my @list = [];
my @questions = $db->findNodes("/db/questions/question");
if (@questions) {
foreach my $question (@questions) {
my $id = $question->findvalue("\@id");
my $title = $question->findvalue("title");
my $author = $question->findvalue("author");
my $insertDate = $question->findvalue("insertDate");
my $obj = Model::Question->new(
path => "vedi-domanda.cgi?id=" . $id,
title => $title,
author => $author,
insertDate => $insertDate
);
# Aggiungi uno
push @list, $obj;
}
}
return @list;
}
答案 0 :(得分:3)
请注意,不需要
if (@questions) { ... }
,因为
foreach my $question (@questions) { ... }
如果数组为空,将不会执行
您初始化@list
时还存在一个错误,您将其设置为[]
。这不会清空数组 - 它将其设置为包含对空数组的引用的一个元素。只需my @list
即可。
最简单的方法是在将@questions
数组转换为Model::Question
个对象数组之前对其进行排序。
确切的代码完全取决于XML中日期字符串的格式,但如果它们格式正确,如ISO 8601日期,则可以将它们排序为字符串以获得所需的效果。所以你可以写
my @questions = sort {
my ($aa, $bb) = map $_->findvalue('insertDate'), ($a, $b);
$aa cmp $bb;
} $db->findNodes('/db/questions/question');
请注意,您尚未显示日期字符串的格式,因此如果没有其他额外的编码,这可能无效
您可能还想使用map
将XML节点转换为Model::Question
个对象,正如我在此子例程中所示
sub get_last_questions {
my ($page) = @_;
$page ||= 1;
my $_PerPage = 30;
my @questions = sort {
my ($aa, $bb) = map $_->findvalue('insertDate'), ($a, $b);
$aa cmp $bb;
} $db->findNodes('/db/questions/question');
my @list = map {
Model::Question->new(
path => 'vedi-domanda.cgi?id=' . $_->findvalue('@id'),
title => $_->findvalue('title'),
author => $_->findvalue('author'),
insertDate => $_->findvalue('insertDate'),
);
} @questions;
return @list;
}