当前位置: 首页 > 面试题库 >

递归array_diff()吗?

麹权
2023-03-14
问题内容

我正在寻找一些工具来给我两个数组的递归差异。我设想的是一个带有两个颜色编码的树结构的网页。在每棵树上,绿色是数组中两个数组都匹配的部分,红色是每个数组中彼此不匹配的部分。像dBug的输出

我有一些代码,使我有一个嵌套的数组来填充报告。我正在开发应该更快的新方法,但是我需要测试值和结构,以确保其输出与旧方法相同。

有什么我可以使用的东西吗?还是我需要写这个?还是有其他方法可以实现我的目标?


问题答案:

在array_diff的注释中实现了一个这样的功能。

function arrayRecursiveDiff($aArray1, $aArray2) {
  $aReturn = array();

  foreach ($aArray1 as $mKey => $mValue) {
    if (array_key_exists($mKey, $aArray2)) {
      if (is_array($mValue)) {
        $aRecursiveDiff = arrayRecursiveDiff($mValue, $aArray2[$mKey]);
        if (count($aRecursiveDiff)) { $aReturn[$mKey] = $aRecursiveDiff; }
      } else {
        if ($mValue != $aArray2[$mKey]) {
          $aReturn[$mKey] = $mValue;
        }
      }
    } else {
      $aReturn[$mKey] = $mValue;
    }
  }
  return $aReturn;
}

该实现一次只能处理两个数组,但是我认为这并不是一个真正的问题。如果一次需要3个或更多阵列的差异,则可以顺序运行差异。同样,此方法使用密钥检查并进行宽松的验证。



 类似资料:
  • 我对函数式编程很陌生,尤其是下面使用的Scheme。我正在尝试使以下函数是递归的,尾递归的。基本上,该函数的作用是对两个字符串的对齐方式进行评分。当给定两个字符串作为输入时,它会比较每个“列”字符,并根据在称为 scorer 的函数中实现的评分方案(由下面的代码中的函数调用)来累积该对齐的分数。 我有一个想法,用一个帮助函数来累积分数,但我不太确定如何去做,因此我该如何让下面的函数尾递归呢?

  • 5.2. 递归 函数可以是递归的,这意味着函数可以直接或间接的调用自身。对许多问题而言,递归是一种强有力的技术,例如处理递归的数据结构。在4.4节,我们通过遍历二叉树来实现简单的插入排序,在本章节,我们再次使用它来处理HTML文件。 下文的示例代码使用了非标准包 golang.org/x/net/html ,解析HTML。golang.org/x/... 目录下存储了一些由Go团队设计、维护,对网

  • 递归允许函数调用自身。 固定的代码步骤一次又一次地执行新值。 我们还必须设置标准来决定递归调用何时结束。 在下面的例子中,我们看到了二进制搜索的递归方法。 我们采用排序列表并将其索引范围作为递归函数的输入。 使用递归进行二进制搜索 我们使用python实现二进制搜索算法,如下所示。 我们使用一个有序的项目列表,并设计一个递归函数,以带有开始和结束索引作为输入的列表。 然后二进制搜索函数调用自己直到

  • 递归过程就是自称过程。 有两种递归:直接和间接。 在直接递归中,过程调用自身并在间接递归中,第一个过程调用第二个过程,该过程又调用第一个过程。 可以在许多数学算法中观察到递归。 例如,考虑计算数字的阶乘的情况。 一个数的因子由等式给出 - Fact (n) = n * fact (n-1) for n > 0 例如:5的阶乘是1 x 2 x 3 x 4 x 5 = 5 x阶乘4,这可以是显示递归

  • 我们在前面的主题中看到了recur语句,而'for'循环有点像循环, recur是Clojure中的一个真正的循环。 如果你有编程背景,你可能听说过尾递归,这是函数式语言的一个主要特性。 这种复现特殊形式是实现尾递归的形式。 正如单词“tail recursion”所示,必须在尾部位置调用recur。 换句话说,复发必须是最后评估的东西。 最简单的recur语句示例在'for'循环中使用。 在以下

  • 递归是以自相似的方式重复项目的过程。 在编程语言中,如果程序允许您在同一函数内调用函数,则称其为函数的递归调用。 void recursion() { recursion(); /* function calls itself */ } int main() { recursion(); } C编程语言支持递归,即调用自身的函数。 但是在使用递归时,程序员需要小心地从函数中定义退出条