2015-04-25 4 views
0

Я пытаюсь реализовать ту же идею естественного соединения в базе данных, но на двух одномерных массивов, так что я пытаюсь сделать, если у меня естьNatural Join двух одномерных массивов

A={[a,b],[a',b']} and B={[b,c], [b',c],[b,c']}

результат NaturalJoin (A, B) должно быть:

Result = {[a,b,c], [a,b,c'],[a',b',c]} 

после того как я найти общий столбец B и сравнить его в обоих массивах, как можно объединить строки? Не могли бы вы дать мне несколько советов о том, как создать joinTableau, поскольку я не знаю количество строк с начала соединения, как я могу создать его динамически?

Это мой псевдо-код:

int[][] array1; 
int[][] array2; 
int shared = prtiallyEqualColumn(array1,array2); 
      for(int i = 0; i <array1.length; i++) 
         { 
          for(int j = 0 ; j < array2.length; j++) 
          { 
           if(array1[i][shared] == array2[j][shared]) 
           { 
             for(int s = 0 ; s < shared; s++) 
             { 
              joinedTableau[joinedCountRow][s] = array1[i][s]; 
             } 
             for(int y=shared+1; y<array2.length;y++) 
             { 
              joinedTableau[joinedCountRow][y] = array2[j][y]; 
             } 
            } 
           } 
          } 
+0

Будучи закаленным пользователем на SO, я считаю, что вы уже знаете, что вам нужно показать нам какой-то псевдо-код, указывающий, что вы пробовали до сих пор? (для записи я еще не спустил вас вниз, но другие могут быть не такими щедрыми) – CKing

+0

Я добавил свое псевдо – Lisa

+1

Спасибо за улучшение вашего вопроса. Это должно увеличить ваши шансы получить ответ. (+1 от меня) – CKing

ответ

1

Я не знаю, что вы сделали в коде, как вы скрыли несколько реализаций из кода, представленного здесь в этом вопросе. Я даю вам Algo: -

Каждое значение столбца array1 должны быть сопоставлены с каждым значением междурядья массив2, чтобы произвести естественное соединение, только в том случае, если они равны, иначе нет.

a1 = array1.countRow(); 
a2 = array1.countColumn(); 
b1 = array2.countRow(); 
b2 = array2.countColumn(); 
i = j = 1; 
while(i<=a1) 
while(j<=b1) 
if(array1[i][a2]==array2[j][1]) // I've made array-indices start from 1 
// perform natural-join operation between array1[i]+array2[j]-common_element 
// Similarly iterate the array for next passes. 

Если есть какая-то ошибка или то, что неясно для вас, пожалуйста, сообщите мне. Удачи вам в вашем коде.

+0

Можете ли вы опубликовать, как я могу назначить строки массиву результатов? – Lisa

+0

@ Лиза. Это твоя домашняя работа. Но все же я дам намек. Добавьте массив1 [i] + array2 [j] -компонентный элемент, который вы сравнили для равенства, используя цикл for в ArrayList! Не могу теперь думать о лучшем решении. Будет обновляться, как только я думаю, что-то эффективно. –

Смежные вопросы