0

私は私が欲しいものを説明しようとしています。私は2つの配列を持っています:

my_array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
my_array_two = ["string", "string", "string", "string", "string", "string", "string", "string", "string", "string" ];

そして、この配列を特定の方法でマージする必要があります。新しい配列は次のようになります。

my_new_array = [1, 2, "string", 3, 4, "string", 5, "string", 6, "string", 7, "string", 8, "string", 9, "string", 10, "string", "string", "string" ]

配列の長さは 1 から 10 までです。これを行う方法がわかりません。このタスクの助けになれば幸いです。前もって感謝します

4

3 に答える 3

0

これが独自のアルゴリズムである場合は、独自のソート アルゴリズムを記述して 2 つをマージするのが最善の方法です。

于 2013-10-30T21:33:04.027 に答える
0

示されている特定の入力と出力から推測できる唯一のパターンは、最初の配列から 2 つの値を取得し、次に 2 番目の配列から 1 つの値を取得し、最初の配列から再び 2 つの値を取得し、両方のすべての値が使用されるまで、それぞれの値を交互に取得することです。配列。

それが正しければ、次のコードがそれを行います。

// copy first input array into output array
var my_new_array = my_array.slice(0);    
// loop over second array
for (var i = 0, j = 2; i < my_array_two.length; i++){
    // insert next item into output at position j
    my_new_array.splice(j, 0, my_array_two[i]);
    // figure out next position to insert    
    j += (j < 4) ? 3 : 2;
}
于 2013-10-30T21:34:42.770 に答える
0

特定のパターンが何であるかはわかりませんが、基本的なアルゴリズムに関しては、次のようなものをお勧めします。

var combined_array = [];
var index1 = 0, index2 = 0;
while ((index1 < my_array.length) && (index2 < my_array_two.length)) {
    if (/*you're at the end of either array*/) {
        // take the next element from the other one.
    }
    else {
        if (compare(my_array[index1], my_array_two[index2])) {
            combined_array.push(my_array[index1]);
            ++index1;
        }
        else {
            combined_array.push(my_array_two[index2]);
            ++index2;
        }
    }
}

compare両方の値を見て、最初の値が 2 番目の値よりも前に来る場合に true を返す、作成した関数はどこにありますか。

于 2013-10-30T21:46:27.967 に答える