【问题标题】:Sort a set of variables based on frequency from a Perl RegEx根据来自 Perl RegEx 的频率对一组变量进行排序
【发布时间】:2014-03-01 20:12:09
【问题描述】:

我正在尝试使用表格或数组来列出和排序项目 以下字母或项目的序列,由“吃”的东西 首先(在捕获的 perl RegEx 中)这四个列表完全相同 项目,只是以不同的顺序,连续输入。

输入项:这些字母代表一个动作或输入到 客户。

a b c d

b c d a

c d b a

d a b c

perl 正则表达式:

^(\w+) eats (a|an) (\w+)\.$

因此,matches[4] 将是捕获的项目。

这将触发 RegEx 将在客户端中触发“每个”集合 字母 (a, b, c, d) 分别输入。所以四组 a, b, c, d 将连续输入,但按轮换顺序输入。以上 正则表达式将触发 16 倍(每个字母一次。)我需要能够 这样排序,如果每次都先吃(a),那将有 顶部的优先级下降。但它可能并不总是(a),它 可以是任何具有优先权的字母。

我需要将此优先级列表显示到间歇泉,例如

PrioList= Geyser.MiniConsole:new({
  name="PrioList",
  x="70%", y="50%",
  width="30%", height="50%",
})

然后我需要能够将每个字母设置为不同的优先级列表 或变量。因为每个单独的字母将表示不同的 需要采取行动,所以我需要说

if (a == highestpriority) then 
do action / function()
end

我不确定如何编写能够 根据 4 组字母对这些项目进行排序和列出。我想 必须保存并重置列表,然后在每个序列之后 以某种方式输入到表格或数组中,并相互比较 最高优先级。但这严重超出了我所知道的 脚本,但我肯定很想学习这个。

【问题讨论】:

  • 两个或多个字母是否可以共享相同的优先级,即,都具有相同的频率?
  • 您正在显示 Lua 代码片段,但您的问题已被 Perl 标记。这是一个错误吗?

标签: regex perl sorting arraylist lua


【解决方案1】:

如果我的理解正确,一个选择是使用 1) 散列来计算输入的第一个字母的频率,以及 2) 调度表将每个字母与子例程相关联:

use strict;
use warnings;
use List::Util qw/shuffle/;

my %seen;
my %dispatchTable = (
    a => \&a_priority,
    b => \&b_priority,
    c => \&c_priority,
    d => \&d_priority
);

for my $i ( 1 .. 4 ) {
    my @chars = shuffle qw/a b c d/;
    print "Round $i: @chars\n";
    $seen{ $chars[0] }++;
}

my $priority = ( sort { $seen{$b} <=> $seen{$a} } keys %seen )[0];
print "Priority: $priority\n";

$dispatchTable{$priority}->();

sub a_priority {
    print "a priority sub called\n";
}

sub b_priority {
    print "b priority sub called\n";
}

sub c_priority {
    print "c priority sub called\n";
}

sub d_priority {
    print "d priority sub called\n";
}

示例运行输出:

Round 1: d c a b
Round 2: b a d c
Round 3: d b a c
Round 4: c d a b
Priority: d
d priority sub called

你说,“我需要能够排序,所以如果每次都先吃(a)……”上面尝试选择频率最高的项目——不是第一次出现四次的项目。

您需要决定在多个字母共享相同频率的情况下该怎么做,但这也许有助于提供一些方向。

【讨论】:

    猜你喜欢
    • 2012-11-28
    • 2019-06-10
    • 2020-08-26
    • 2018-01-18
    • 1970-01-01
    • 2017-06-29
    • 1970-01-01
    • 2017-11-24
    • 1970-01-01
    相关资源
    最近更新 更多