2015-05-06 10 views
5

W tym przypadku używam dwóch równoległych tablic (cost[] i scores[]), oba z danymi na nich równoległymi.W jaki sposób pojedyncza pętla dla iteracji może przechodzić przez wiele tablic?

Ten kod jest prawidłowy i kopiuję go z książki, której używam. Czego nie otrzymuję, to jak ta pętla może działać dla tablicy kosztów. Rozumiemy, że przekazujemy obydwie tablice jako parametry w funkcji, ale w pętli for jest tylko scores.length, więc nie powinna to być kolejna pętla dla cost.lenght?

function getMostCostEffectiveSolution(scores, costs, highScore) 
    var cost = 100; 
    var index; 

    for (var i = 0; i < scores.length; i++) { 
     if (scores[i] == highScore) { 
      if(cost > cost[i]) { 
       index = i; 
       cost = cost[i]; 
      } 
     } 
    } 
    return index; 
} 
+7

to lo OK jak kod zakłada, że ​​zarówno koszty, jak i wyniki mają tę samą długość. Jeśli obie mają taką samą długość, wystarczy użyć jednej z ich długości. Zauważ, że masz literówkę, w której używasz 'cost [i]', gdy prawdopodobnie powinno to być 'costs [i]' –

+2

Jeśli są to tablice równoległe, czy ich długości nie są takie same? – froadie

+0

Myślę, że w tym przypadku obie długości macierzy są takie same. –

Odpowiedz

4

http://en.wikipedia.org/wiki/Parallel_array

W informatyce grupę równoległych układach jest struktura danych dla stanowiących tablice rekordów. Utrzymuje oddzielną, jednorodną tablicę dla każdego pola rekordu, każdego posiadające taką samą liczbę elementów

Jeśli oboje są naprawdę równoległe niż oba zespoły będą mieć taką samą długość.

Tak scores.length == costs.length. Musisz tylko użyć jednego warunku pętli i użyć tej samej zmiennej indeksowej, aby uzyskać dostęp do obu tablic.

Przykład

var a = [1,2,3]; 
var b = [4,5,6]; 

for(var i=0; i<a.length; i++){ 
    console.log(a[i] +" "+ b[i]); 
} 

wyjściowa:

1 4 
2 5 
3 6 

Stosując długość B jest

for(var i=0; i<b.length; i++){ 
    console.log(a[i] +" "+ b[i]); 
} 

wyjściowa:

1 4 
2 5 
3 6 
+0

Tylko pomysł, ale można zawijać dla pętla w 'if (a.length == b.length) {for ...}' – Dendromaniac

Powiązane problemy