【问题标题】:Optimized way to get a position list of a bit list获取位列表位置列表的优化方式
【发布时间】:2013-09-12 20:41:54
【问题描述】:

有没有人有更有效/更快的方法来获取整数中所有 1 位位置的列表?我有这个:

array_keys(
    str_split(
        strrev(
            decbin(1234)
        )
    ), '1', true
)

输出是:

array(1, 4, 6, 7, 10)

【问题讨论】:

    标签: php arrays optimization


    【解决方案1】:

    您可以尝试使用正则表达式,但我敢打赌您的解决方案会更好。

    preg_match_all('/1/', strrev(decbin(1234)), $matches, PREG_OFFSET_CAPTURE);
    $output = array_map(function($item){
      return $item[1];
    }, $matches[0]);
    

    输出:

    array (size=5)
      0 => int 1
      1 => int 4
      2 => int 6
      3 => int 7
      4 => int 10
    

    【讨论】:

      【解决方案2】:

      位操作比字符串和数组操作更快:

      $x = 1234;
      $ak = array();
      $i = 0;
      
      while ($x)
      {
          if ( $x % 2 )
          {
              $ak[] = $i;
          }
      
          $i++;
          $x = $x >> 1;
      }
      
      print_r($ak);
      

      这里的代码行数更多,但速度更快……

      【讨论】:

        猜你喜欢
        • 2011-09-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-15
        • 1970-01-01
        相关资源
        最近更新 更多