2013-10-30 1 views
0

배열을 랜덤 화하기 위해 knuth shuffle을 사용하고 있습니다. 다른 배열을 추가하고 같은 방법으로 임의화할 수 있기를 바랍니다. 이전에 ['A|1|I,B|2|II,C|3|III,D|4|IV'] 등의 문자열 내에서 배열을 분리하는 생각을했습니다.같은 방식으로 Knuth Shuffle 다중 배열

stackoverflow에서 this을 읽었지 만 knuth shuffle을 정렬하는 방법을 배울 수 없습니다.

위의 링크에서 추가 코드를 가져 와서 첫 번째 배열에서 문자열을 가져 오는 JS를 사용하고 있습니다. 귀하의 링크에서

Array.prototype.knuthShuffle = function() 
     { 
      var i = this.length, j, temp; 
      while (--i) 
      { 
       j = Math.floor(Math.random() * (i - 1)); 
       temp = this[i]; 
       this[i] = this[j]; 
       this[j] = temp; 
      } 
     }; 

var array_chromatic = ['A', 'A%23', 'Bb', 'B', 'C', 'C%23', 'Db', 'D', 'D%23', 'Eb', 'E', 'F', 'F%23', 'Gb', 'G', 'G%23', 'Ab'], 
    array_chronumb = ['Aa', 'A%23a', 'Bbb', 'Bb', 'Cc', 'C%23c', 'Dbd', 'Dd', 'D%23d', 'Ebe', 'Ee', 'Ff', 'F%23f', 'Gbg', 'Gg', 'G%23g', 'Aba']; 

     function renderKnuth() 
     { 
      array_chromatic.knuthShuffle(); 
     array_chronumb.knuthShuffle(); 

      var audio = document.getElementById('sound'); 
     audio.src = 'url-redacted' + array_chromatic[0] + '.mp3'; 
     var str1 = array_chromatic[0] 
     str2 = str1.replace("%23", '#'); 
      document.getElementById('knuth_data2').innerHTML = str2;// + array_accidental[0]; 
document.getElementById('knuth_data3').innerHTML = array_chronumb[0]; 
     } 

답변

0

기능을 사용하면 사용하여,

function randomise(a, b) 
{ 
    var i = a.length, j, temp; 
    while (--i) 
    { 
     j = Math.floor(Math.random() * (i - 1)); 
     temp = a[i]; 
     a[i] = a[j]; 
     a[j] = temp; 
     temp = b[i]; 
     b[i] = b[j]; 
     b[j] = temp; 
    } 
}; 

var array_chromatic = ['A', 'A%23', 'Bb', 'B', 'C', 'C%23', 'Db', 'D', 'D%23', 'Eb', 'E', 'F', 'F%23', 'Gb', 'G', 'G%23', 'Ab']; 
var array_chronumb = ['Aa', 'A%23a', 'Bbb', 'Bb', 'Cc', 'C%23c', 'Dbd', 'Dd', 'D%23d', 'Ebe', 'Ee', 'Ff', 'F%23f', 'Gbg', 'Gg', 'G%23g', 'Aba']; 

randomise(array_chromatic, array_chronumb); 
1

가 다른 배열의 순서에 해당 배열의 셔플을 적용 후 주문 번호를 하나의 배열을 섞어서 것을 적극 shuffled 배열의 값을 다른 배열의 인덱스로 사용합니다. 여기

var index_array = [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]; 
index_array.knuthShuffle(); 

var array_chromatic_shuffled = [], 
    array_chronumb_shuffled = []; 

for(var i=0; i<index_array.length; ++i) { 
    array_chromatic_shuffled[i] = array_chromatic[index_array[i]]; 
    array_chronumb_shuffled[i] = array_chronumb[index_array[i]]; 
} 

array_chromatic = array_chromatic_shuffled; 
array_chronumb = array_chronumb_shuffled; 

index_array가 단행 배열을 원래의 배열에서 읽고 채우는 데 사용 단행 인덱스의 목록을 형성 단행됩니다. 반복 할 때마다 index_array[i]은 각 배열에서 값을 가져 와서 배열의 대응되는 임의의 형태로 인덱스 i에 배치하는 데 사용되는 셔플 색인입니다.