我正在尝试使用表或数组来列出和排序项目 以下序列的字母或项目,通过什么“吃” 首先(在捕获的perl RegEx中)这四个列表完全相同 项目,只是以不同的顺序连续输入。
输入项目:这些字母代表一个动作或输入 客户端。
a b c d
b c d a
c d b a
d a b c
perl regex:
^(\w+) eats (a|an) (\w+)\.$
所以匹配[4]将是捕获的项目。
这将触发RegEx将在客户端中使用'each'集合触发 字母(a,b,c,d)分别输入。那么四套a,b,c,d那个 将在轮流订单的基础上连续输入。以上 RegEx将以16x(每个字母一次)开火。我需要能够 这样排序,如果(a)每次都被吃掉,那么就会有 最高优先级下降。但它可能并不总是(a),它 可以是任何优先的字母。
我需要将此优先级列表显示到Geyser,例如
PrioList= Geyser.MiniConsole:new({
name="PrioList",
x="70%", y="50%",
width="30%", height="50%",
})
然后我需要能够将每个字母设置为不同的优先级列表 或变量。因为每个单独的字母都表示不同 需要采取行动,所以我需要说
if (a == highestpriority) then
do action / function()
end
我不确定如何编写能够执行的'for'语句 根据4组字母对这些项目进行排序和列出。我想 在每个序列之后,必须保存并重置列表 不知何故进入一个表或数组,并相互比较 最高优先级。但这严重超出了我所知道的范围 脚本,但我一定很想学这个。
答案 0 :(得分:0)
如果我正确地理解你,一个选择是使用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)每次都先吃掉......”以上尝试选择频率最高的项目 - 不是最初四次的项目。
在多个字母共享相同频率的情况下,您需要决定该怎么做,但这可能有助于提供一些方向。