【问题标题】:Preserving the order of keywords found using Tree::Trie in Perl在 Perl 中保留使用 Tree::Trie 找到的关键字的顺序
【发布时间】:2012-12-06 01:24:49
【问题描述】:

我正在使用Tree::Trie 模块来构建关键字树。我想按原始数组中的顺序打印数组的元素。

use strict;
use warnings;

use Tree::Trie;

my @ar = ('foo', 'great','food', 'banana','apple', 'fish');

my ($trie) = new Tree::Trie;
$trie->add(@ar);
my @ms  = $trie->lookup('f');
print join(",", @ms);

输出是

fish,foo,food

期望的输出

foo,food,fish

有人可以帮我吗?

【问题讨论】:

  • 一个 trie 按字典顺序排列;您能否提供有关您实际尝试解决的问题的更多信息?尝试可能完全是错误的。
  • 我正在尝试构建一个关键字树并按顺序打印。更多信息:stackoverflow.com/questions/13662352/…

标签: arrays perl tree


【解决方案1】:

另一种选择是使用Tree::Trieadd_data,它会将您的话与订单数据结合起来,如下所示:

'foo' => 0,'great' => 1,'food' => 2,'banana' => 3,'apple' => 4,'fish' => 5

lookup_data 之后返回单词及其相关数据。然后可以使用该数据来保留原始词序:

use strict;
use warnings;
use Tree::Trie;

my @ar = qw( foo great food banana apple fish );

my $trie = Tree::Trie->new();
$trie->add_data( map { $ar[$_] => $_ } 0..$#ar );

my %ms = $trie->lookup_data('f');
my @ms = sort { $ms{$a} <=> $ms{$b} } keys(%ms);
print(join(',', @ms), "\n");

输出:

foo,food,fish

【讨论】:

  • @ikegami - 感谢您的改进。
  • 不客气。您甚至可以使用 my $i = 1; my @ms = map $ar[$_], sort { $a &lt;=&gt; $b } grep ++$i % 2, $trie-&gt;lookup_data('f'); 避免中间散列
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-10
  • 2018-08-01
  • 1970-01-01
  • 2015-11-02
  • 2015-04-17
  • 1970-01-01
相关资源
最近更新 更多