【问题标题】:Best solution for finding duplicates in array在数组中查找重复项的最佳解决方案
【发布时间】:2013-11-22 20:36:32
【问题描述】:

为了学习。我发现了一个简单的问题,但我知道它有几个解决方案,因为我想更多地练习并使用函数或以正常方式找到问题的解决方案。

所以问题是这样的

Given an array of integers, how do you determine if there are duplicates?

a = [1, 2, 3, 4, 5]
b = [1, 2, 3, 4, 5, 3]

这是我的解决方案:

对于 javascript

 function has_dup(arr){

        for(i=0; i< arr.length; i++){
            checker = arr[i];
            duplicates = 0;
            for(x=0; x < arr.length; x++ ){

                //if duplicate          
                if(checker == arr[x]){
                    duplicates++;
                }
            }
        }

        //if has duplicate
        if(duplicates > 1){
            return true;
        }else{
            return false;
        }   
    }

//first run
arr = [1,2,3,4,5];
alert(has_dup(arr));

//second run
arr2 = [1, 2, 3, 4, 5, 3];
alert(has_dup(arr2));

PHP 中:

$arr = array(1,2,3,4,5);
$arr2 = array(1,2,3,4,5,3);

function check_duplicate($arr){
  $duplicates = 0;

  foreach($arr as $index => $value){

    foreach($arr as $i => $ref)
    {
      if($value == $ref){
        $duplicates++;
       }
    }
  }

  return ($duplicates < 1 ? true : false);
}


check_duplicate($arr);
check_duplicate($arr2);

鉴于这种情况,您能否给我两种语言的最佳答案,您还可以评论我在这里可能犯的错误。如果有很多解决方案,我可能会悬赏它

谢谢!

【问题讨论】:

标签: javascript php arrays duplicates


【解决方案1】:

尝试使用 PHP 框架中提供的 array_key_existsin_array 方法。

$newArray = array();
foreach($myArray as $key => $value) {
    //If I havent added this value, then add it..
    if(!in_array($value, $newArray)){
        $newArray[] = $value;
    }
}

对于 javascript jQuery.inArray().

【讨论】:

    【解决方案2】:

    这是我在 PHP 中使用的

    /*
    Scope of has_duplicate is to determine whether the passed array has duplicate values or not
    @arguments $arr - array to be tested
    @returns boolean value true/false
    */
    
    function has_duplicate($arr){
        return (count($arr) > count(array_unique($arr))) ? true: false;
    }
    

    有关详细信息,请参阅官方文档中的 array_uniquecount

    【讨论】:

      【解决方案3】:

      好的,让我们采用您的原始想法并增加一些效率。 首先,如果你只是想弄清楚是否至少有一个重复,一旦你找到你的第一个重复,你应该立即返回 true。如果您到达函数的末尾,您可以假设您没有找到任何重复项。其次,不要试图一遍又一遍地检查相同的元素。如果他们第一次不匹配,他们将不会匹配第二次。

      对于 Javascript:

      function has_dup(arr){
          var arr_len = arr.length;
          for(var i=0; i<arr_len; i++){
              var val = arr[i];
              for(var j=i+1; j<arr_len; j++){
                  if(val === arr[j]){
                      return true;
                  }
              }
          }
          return false;
      }
      

      对于 PHP:

      function check_duplicates($arr){
          $len = count($arr);
          for($i = 0; $i < $len; $i++){
              $val = $arr[$i];
              for($j = $i+1; $j<$len; $j++){
                  if($val == $arr[$j]){
                      return true;
                  }
              }
          }
          return false;
      }
      

      在 PHP 中,您还可以构建一个唯一的数组并检查大小的差异:

      function check_duplicates($arr){
          return count(array_unique($arr)) != count($arr);
      }
      

      【讨论】:

        【解决方案4】:

        PHP:使用 array_unique()。

        function check_duplicate($arr) {
            return (count($arr) > count(array_unique($arr)) ? true : false;
        }
        

        Javascript:据我所知,没有捷径可走。使用 UnderscoreJS 的 _.uniq()。

        function has_dup(arr) {
            return (arr.length > _.uniq(arr).length) ? true : false;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-12
          • 2022-12-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多