请解释一下本代码第3行发生了什么

时间:2014-02-18 05:36:49

标签: perl adjacency-matrix

请解释一下本代码第3行的内容。

 for my $i (0 .. $dim) {
    for my $j (0 .. $dim) {
        $adj->[$i][$j] = $adj->[$i][$j] ? [$j] : [];

3 个答案:

答案 0 :(得分:3)

代码循环遍历数组引用$adj中的两个维度。据推测,$dim是维,$i$j遍历从0$dim的数字列表,例如0,1,2,3,4,5

对于每个数字组合,检查该数组元素的值的真实性,并为其分配一个新值。如果值为false,则为其分配一个包含索引$j的数组引用,否则为空数组[]

这里使用条件运算符,基本语法为

CONDITION ? FOO : BAR
if CONDITION then FOO else BAR

据推测,数组引用$adj应该包含数组引用,这就是为什么它可以简单地将真实性检查为defined $adj->[$i][$j]的快捷方式。

答案 1 :(得分:2)

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

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

perlop有这样的引用:

  

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

答案 2 :(得分:0)

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

上面的for循环将使用维度$ dim x $ dim

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

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