javascript - 4个一维数组的元素能组成多少个一维数组
phpcn_u1582
phpcn_u1582 2017-05-16 13:04:38
0
5
590

例如,

[1,2,3,4], [5], [7,8], [9]

生成一维数组, 应该是 8 种 .

其实类似树枝状 ~

[1,5,7,9],
[2,5,7,9],
[1,5,7,9],

/*** 
** 省略 ...
***/

[4,5,8,9]

假如是多一个元素呢 ?

[1,2,3,4], [5,6], [7,8], [9]

怎么把所有可能的组合都列出来 ?

phpcn_u1582
phpcn_u1582

répondre à tous(5)
阿神
#这就是求笛卡尔积

from itertools import product
print list(product([1,2,3,4], [5, 6], [7,8], [9]))
phpcn_u1582

4*2*2, 16 sortes
Permutations et combinaisons, puisque chaque tableau doit avoir un élément, alors pour
tableau 1 : c(4,1)=4,
tableau 2 : c(2,1) =2. ,
Tableau 3 : c(2,1)=2,
Tableau 4 : c(1,1)=1,
Multipliez chacun à nouveau et faites attention aux éléments répétés.

阿神
    $a1 = array(1,2,3,4);
    $a2 = array(5);
    $a3 = array(7,8);
    $a4 = array(9);
    foreach ($a1 as $k1=>$v1){
        foreach ($a2 as $k2=>$v2){
            foreach ($a3 as $k3=>$v3){
                foreach ($a4 as $k4=>$v4){
                    $a = array($v1,$v2,$v3,$v4);
                    print_r($a);
                    echo "<br>";
                } 
            } 
        } 
    }
伊谢尔伦

D'une manière générale, s'il y a plusieurs groupes, plusieurs boucles sont nécessaires. Il suffit de combiner les éléments à l'intérieur un par un. C'est la solution conventionnelle de js. Je ne sais pas s'il existe une meilleure.

var a = [1,2,3,4],
    b = [5,6],
    c = [7,8],
    d = [9];

for(var i = 0; i < a.length; i++) {
    for(var j = 0; j < b.length; j++) {
        for(var k = 0; k < c.length; k++) {
            for(var l = 0; l < d.length; l++) {
                console.log(a[i] + '-' + b[j] + '-' + c[k] + '-' + d[l]);
            }
        }
    }
}
为情所困
function list(arr){
    function newArr(arr){
      var num=1;
      arr.forEach((x)=>{
        num*=x.length
      })
      var tem=[]
      for(var i=0;i<num;i++){
        tem[i]=[];
      }
      return tem
    }
    function numFn(num){
        var pp=[];
        var nums=list.length;
        arr.forEach(function(x){
          nums=nums/x.length
          pp.push(x[nums==1?num%x.length:parseInt(num/nums)%x.length]);
       
        })
        return pp
    }
    var list=newArr(arr);
    for(var j=0;j<list.length;j++){
       list[j]=numFn(j)
    }
    return list
  }
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!