arrays - 如何递增列表中的值?

标签 arrays perl iterator increment

我曾多次尝试搜索此问题,但无法形成与我的问题实际相关的搜索结果。
我正在尝试构建一个脚本来解析 SVG 文件(生成图形内容的 XML 文本格式文件),寻找特定的提示并分配 RGB 值。 (每个RGB值都会略有不同。)
为此,我设想了多个递增变量(例如 $i、$j 和 $k),这些变量根据解析文本文件时找到的触发器而递增。 但是,我需要增加的金额不是“1”。此外,所需的值是十六进制形式。 我可以设置一些变量,让变量增加给定量,例如 +33,但我还需要将数字转换为十六进制,弄清楚如何重新开始,等等。

我想到了一种更加通用、强大和优雅的方法,但我不知道如何去做。
如何设置这些递增变量以递增我在数组中设置的值?
例如,假设我的 RGB 潜在值为 @rgbval = (00,33,66,99,cc,ff)。
如何使 $i 从此列表中的一个值转到下一个值?
更好的是,我怎样才能使 $i++ (或类似的东西)意味着“转到@rgbval中的下一个元素的值”?
假设这是可能的,我如何告诉 Perl 在到达数组末尾后从元素 [0] 开始?

最佳答案

所以你有一个字符串,它是数字的十六进制表示

my $hex = 'cc';

要对其进行算术运算,您首先需要将其转换为数字。

my $num = hex($hex);

现在我们可以对其进行算术运算。

$num += 33;

如果我们想将其转换回十六进制,我们可以使用

$hex = sprintf("%02x", $num);

$i 通常用于索引。如果这就是您想要的,您可以使用以下内容:

for my $i (0..$#rgbval) {
   # Do something with $i and/or $rgbval[$i]...
}

如果您希望 $i 接受每个值,则可以使用以下内容:

for my $i (@rgbval) {
   # Do something with $i...
}

但您似乎想要一个环绕的计数器。

最简单的解决方案是使用 if 语句。

my $i = 0;
while (...) {
   # Do something with $i and/or $rgbval[$i]...

   ++$i;
   $i = 0 if $i == @rgbval;
}

但我会使用模运算。

my $i = 0;
while (...) {
   # Do something with $i and/or $rgbval[$i]...

   $i = ( $i + 1 ) % @rgbval;
}

或者,您可以旋转阵列。

while (...) {
   # Do something with $rgbval[0]...

    push @rgbval, shift(@rgbval);
}

关于arrays - 如何递增列表中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62842553/

相关文章:

perl - 如何使用 Perl 判断两个文件的内容是否相同?

c++ - 用于建模一般树结构及其迭代器的智能指针

ios - 将一个数组从 Swift 中的特定索引复制到另一个数组

javascript - 根据给定值将运算从求和更新为减法,反之亦然

javascript - Reverse an array in array 反转数组中的所有数组

知道接收器类型的 Perl 函数

perl - 如何将调试器附加到 Dancer2 应用程序

java - 如何在 JSON 解析期间在 Java 中搜索 JSON 对象中的特定键

javascript - Firebug 中的 'iterator' 函数是什么?

php - 访问对象中的数组