RFA*_*RFA 2 arrays sorting perl
我有一个数组:
@all (
<side.effect signif="life.threat">myocardial infarction</side.effect>
<side.effect signif="life.threat">hypersensitivity reactions</side.effect>
<side.effect signif="life.threat">lactic acidosis</side.effect>
<side.effect signif="most.freq">vomiting</side.effect>
<side.effect signif="most.freq">diarrhea</side.effect>
);
Run Code Online (Sandbox Code Playgroud)
我想对打开 XML 标记/属性 (">) 之后的值的数组进行排序,以生成以下输出:
<side.effect signif="most.freq">diarrhea</side.effect>
<side.effect signif="life.threat">hypersensitivity reactions</side.effect>
<side.effect signif="life.threat">lactic acidosis</side.effect>
<side.effect signif="life.threat">myocardial infarction</side.effect>
<side.effect signif="most.freq">vomiting</side.effect>
Run Code Online (Sandbox Code Playgroud)
我无法将其转换为哈希,因为这会消除由于复制而产生的标签。我尝试了这个,但它没有对它们进行排序:
my @sorted_all = sort {
my ($aa, $bb) = map { (split)[1] } $a, $b;
$bb <=> $aa;
} @all;
Run Code Online (Sandbox Code Playgroud)
use strict;
use warnings;
use feature qw(say);
use Sort::Key qw(keysort);
my @all = (
q{<side.effect signif="life.threat">myocardial infarctio</side.effect>},
q{<side.effect signif="life.threat">hypersensitivity reations</side.effect>},
q{<side.effect signif="life.threat">lactic acidosis</sid.effect>},
q{<side.effect signif="most.freq">vomiting</side.effect>},
q{<side.effect signif="most.freq">diarrhea</side.effect>},
);
my @sorted = keysort { ( /">(.+?)<\// )[0] } @all;
say for @sorted;
Run Code Online (Sandbox Code Playgroud)
该库在需要时使用Schwartzian 变换,首先为所有项目构建比较模式(并且不在每对比较时重新执行)。我复制了给定的输入,包括错别字等等。
使用正则表达式解析 XML 标记依赖于这种非常特定的输入格式。如果格式存在变化,请使用适当的 XML 解析器,例如XML::LibXML。例如
use XML::LibXML;
my $parser = XML::LibXML->new;
my @sorted = keysort {
$parser -> parse_string($_)
-> findnodes('side.effect') -> [0]
-> textContent
} @all;
Run Code Online (Sandbox Code Playgroud)
对于此代码,请参阅XML::LibXML::Parser和XML::LibXML::Node。该库附带了更多文档,请参阅第一次提到时链接的顶部文档。
为此,我必须纠正sid.effect一个节点中的拼写错误,以获得有效的 XML。
| 归档时间: |
|
| 查看次数: |
87 次 |
| 最近记录: |