请向我解释这段代码的第3行中发生了什么

问题描述 投票:0回答:3

请解释一下这段代码第3行中的内容。

 for my $i (0 .. $dim) {
    for my $j (0 .. $dim) {
        $adj->[$i][$j] = $adj->[$i][$j] ? [$j] : [];
perl adjacency-matrix
3个回答
3
投票

代码在数组引用$adj中的两个维度上循环。 假定$dim是维,并且$i$j在从0$dim的数字列表中进行迭代,例如0,1,2,3,4,5

对于每个数字组合,都会检查该数组元素的值是否正确,并为其分配一个新值。 如果该值为false,则为其分配一个包含索引$j的数组ref,否则为一个空数组ref []

在此使用条件运算符以及基本语法

CONDITION ? FOO : BAR
if CONDITION then FOO else BAR

大概,数组ref $adj应该包含数组引用,这就是为什么它可以简单地检查是否为已defined $adj->[$i][$j]的快捷方式。


2
投票

这是三元运算符 ,又称条件运算符

如果$adj->[$i][$j]为0(或未定义),则将[]分配给$adj->[$i][$j] ,在其他情况下,将$adj->[$i][$j]被关联到$adj->[$i][$j] adj- $adj->[$i][$j]

perlop有这样的报价:

与C中一样,三元“?:”是条件运算符。它的工作方式与if-then-else非常相似。 如果在论点之前? 如果为true,则返回:之前的参数,否则返回:之后的参数。


0
投票
    for my $i (0 .. $dim) {
      for my $j (0 .. $dim) {

上面的for循环将遍历arry,尺寸为$ dim x $ dim

    $adj->[$i][$j] = $adj->[$i][$j] ? [$j] : [];

如果$ adj-> [$ i] [$ j]为零,则将[]分配给$ adj-> [$ i] [$ j],否则分配$ j(列值)

© www.soinside.com 2019 - 2024. All rights reserved.