第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用黑名單數(shù)組刪除值,然后減少剩余值以消除間隙?

如何使用黑名單數(shù)組刪除值,然后減少剩余值以消除間隙?

PHP
ABOUTYOU 2023-07-21 15:57:37
這個問題基本上是我之前問題的延伸:如何減去數(shù)組的值但仍處于位置我有一個數(shù)組的輸入數(shù)組。每個子數(shù)組中的值始終由0從無間隙開始的值組成,值遞增 1。但是,這些值不一定按順序排列,并且我需要在執(zhí)行所需邏輯時保留此順序。接下來,我有一個希望從所有子數(shù)組中刪除的值黑名單。必須刪除黑名單數(shù)組中存在的任何原始子數(shù)組值。數(shù)組的示例輸入數(shù)組:$arrays?=?[ ????[0,?3,?10,?5,?6,?9,?2,?7,?1,?4,?8,?11], ????[0,?1,?2,?3], ????[0,?5,?2,?4,?3,?1], ????[0,?1,?3,?2] ];黑名單數(shù)組示例:$deletes?=?[3,?5];我想要的輸出是:[ ????[0,?8,?4,?7,?2,?5,?1,?3,?6,?9], ????[0,?1,?2], ????[0,?2,?3,?1], ????[0,?1,?2], ]自從我刪除數(shù)字以來,所有大于的剩余值都3減少了1,并且大于的值都5減少了。22如果給定子數(shù)組中的所有數(shù)字都小于黑名單數(shù)組中的所有數(shù)字,則不需要對該子數(shù)組進(jìn)行任何更改。我在這里嘗試編碼https://3v4l.org/lX2MP,但在返回它們的值時我陷入困境。所有數(shù)組值都合并在一起。
查看完整描述

2 回答

?
尚方寶劍之說

TA貢獻(xiàn)1788條經(jīng)驗(yàn) 獲得超4個贊

我將稍微改變你的第二個、第三個和第四個子數(shù)組,以更好地演示該行為。

利用我對上一個問題的回答中的一項(xiàng)技術(shù),我實(shí)際上只是將代碼邏輯包裝在一個附加循環(huán)中array_map()。

array_diff()用于立即銷毀輸入數(shù)組中與刪除值匹配的任何值。然后array_reduce()使用輸入數(shù)組的剩余值來迭代并減少任何生成的整數(shù)以消除間隙。

里面array_reduce(),你會看到$value > $item。此比較將返回trueor false。當(dāng)布爾值用作數(shù)字時,true變?yōu)?code>1并false變?yōu)?code>0?;旧?,我根據(jù)每個值與給定的比較來減去01減去。$value$deletes$value

作為一個具體例子,當(dāng)處理時1010大于3,因此變?yōu)?code>9,并且10大于,5因此9變?yōu)?code>8。

這一切都是在不需要預(yù)先排序數(shù)據(jù)的情況下完成的。

代碼:(演示

$arrays = [[0, 3, 10, 5, 6, 9, 2, 7, 1, 4, 8, 11], [0, 1, 2, 3], [0, 5, 2, 4, 3, 1], [0, 1, 3, 2]];

$deletes = [3, 5];


var_export(

    array_map(

        function($array) use ($deletes) {

            $result = [];

            foreach (array_diff($array, $deletes) as $value) {

                $result[] = array_reduce(

                    $deletes,

                    function ($carry, $item) use ($value) {

                        return $carry - ($value > $item);

                    },

                    $value

                );

            }

            return $result;

        },

        $arrays

    )

);

這是一種行為方式相同但不太依賴函數(shù)式編程的替代方案:(演示


foreach ($arrays as $index => $array) {

    $filtered = array_diff($array, $deletes);  // destroy blacked values

    foreach ($filtered as $value) {

        $originalValue = $value;

        foreach ($deletes as $delete) {

            $value -= $originalValue > $delete; // reduce to eliminate gaps

        }

        $result[$index][] = $value;

    }

}


var_export($result);

輸出(對于任一片段):


array (

  0 => 

  array (

    0 => 0,

    1 => 8,

    2 => 4,

    3 => 7,

    4 => 2,

    5 => 5,

    6 => 1,

    7 => 3,

    8 => 6,

    9 => 9,

  ),

  1 => 

  array (

    0 => 0,

    1 => 1,

    2 => 2,

  ),

  2 => 

  array (

    0 => 0,

    1 => 2,

    2 => 3,

    3 => 1,

  ),

  3 => 

  array (

    0 => 0,

    1 => 1,

    2 => 2,

  ),

)


查看完整回答
反對 回復(fù) 2023-07-21
?
阿波羅的戰(zhàn)車

TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超6個贊

要從數(shù)組中刪除數(shù)字并從原始數(shù)組中的當(dāng)前數(shù)字中減去小于該數(shù)字的計(jì)數(shù)selectedDeletedNumbers,您可以:

  • 對數(shù)組進(jìn)行排序selectedDeletedNumbers。

  • 迭代原始數(shù)組并使用它binary search來獲取小于原始數(shù)組中當(dāng)前數(shù)字的數(shù)字計(jì)數(shù),然后將其減去。

  • 如果當(dāng)前編號存在于 中selectedDeletedNumbers,則取消設(shè)置它們。

  • 對每個單獨(dú)的子數(shù)組應(yīng)用上述操作。

片段:

<?php


function subtract(&$arr,$selectedDeletedNumbers){ // pass by reference to edit the same copy of the array

? ? foreach($arr as $index => $val){

? ? ? ? $low = 0;$high = count($selectedDeletedNumbers) - 1;

? ? ? ? $equal_found = false;

? ? ? ? while($low <= $high){

? ? ? ? ? ? $mid = intval(($low + $high) / 2);

? ? ? ? ? ? if($selectedDeletedNumbers[$mid] > $val){

? ? ? ? ? ? ? ? $high = $mid - 1;

? ? ? ? ? ? }else if($selectedDeletedNumbers[$mid] < $val){

? ? ? ? ? ? ? ? $low = $mid + 1;

? ? ? ? ? ? }else{

? ? ? ? ? ? ? ? $equal_found = true;

? ? ? ? ? ? ? ? unset($arr[$index]); // if equal value, delete it as it your need

? ? ? ? ? ? ? ? break;

? ? ? ? ? ? }

? ? ? ? }

? ??

? ? ? ? if(!$equal_found){

? ? ? ? ? ? $arr[$index] -= $low; // delete the offset till where it is greater among your $selectedDeletedNumbers

? ? ? ? }

? ? }

}


$selectedDeletedNumbers = [3,5];

sort($selectedDeletedNumbers); // sort to be apply binary search later

$arr = [[0, 3, 10, 5, 6, 9, 2, 7, 1, 4, 8, 11], [0, 1], [0, 1], [0, 1]];


foreach($arr as &$val){ // pass by reference to edit the same copy of the array

? ? subtract($val,$selectedDeletedNumbers);?

}


print_r($arr);

演示: https:?//3v4l.org/RMh5U

如果您想按順序重新索引數(shù)字,請array_values()最后對每個單獨(dú)的子數(shù)組執(zhí)行一個操作。


查看完整回答
反對 回復(fù) 2023-07-21
  • 2 回答
  • 0 關(guān)注
  • 160 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號