我曾多次尝试搜索此问题,但无法形成与我的问题实际相关的搜索结果。
我正在尝试构建一个脚本来解析 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/