Как Конкатенировать два отсортированных массива .?
static void Main(string[] args)
{
int[] arr = {12,13,22,1333 };
int[] arr2 = {6,4,3596, };
int[] vs = ArrayAdd(arr, arr2);
Array.Sort(vs);
foreach (var item in vs)
{
Console.Write(item+",");
}
//Console.WriteLine(vs.Length);
}
static T[] ArrayAdd<T>(T[] arr, T[] arr2)
{
Sort1(arr);Sort1(arr2);
var res = new T[arr.Length + arr2.Length];
for (var i = 0; i < arr.Length; i++)
res[i] = arr[i];
for (var i = 0; i < arr2.Length; i++)
res[arr.Length + i] = arr2[i];
return res;
}
как написать этот код, чтобы он работал на JavaScript. На выходе возвращает undefined, но на c# работает нормально
let arr=[7,3,6,1];
let arr2=[2,4,5];
let res = new Array(arr.length + arr2.length);
function merg(arr,arr2) {
arr.sort(); arr2.sort();
for (let i = 0; i < arr.Length; i++)
res[i] = arr[i];
for (let i = 0; i < arr2.Length; i++)
res[arr.Length + i] = arr2[i];
return res;
};
console.log(merg(arr,arr2));
Ответы (1 шт):
Автор решения: Grundy
→ Ссылка
Код с c# переносится практически 1 к 1, если убрать из кода определение типов, и вызывать соответствующие методы, например, длину массива в js можно получить из свойства .length
Тогда из
static T[] ArrayAdd<T>(T[] arr, T[] arr2)
{
Sort1(arr);Sort1(arr2);
var res = new T[arr.Length + arr2.Length];
for (var i = 0; i < arr.Length; i++)
res[i] = arr[i];
for (var i = 0; i < arr2.Length; i++)
res[arr.Length + i] = arr2[i];
return res;
}
Останется следующее
function ArrayAdd(arr, arr2)
{
arr.sort();arr2.sort();
var res = new Array(arr.length + arr2.length);
for (var i = 0; i < arr.length; i++)
res[i] = arr[i];
for (var i = 0; i < arr2.length; i++)
res[arr.length + i] = arr2[i];
return res;
}
Единственное отличие в поведении теперь, заключается в том, что по умолчанию компаратор метода sort сравнивает элементы как строки, в то время как в C# результат зависит от типа элементов коллекции.
Для правильной сортировки достаточно передать нужный компаратор:
let arr = [7, 13, 6, 1];
let arr2 = [2, 4, 15];
function ArrayAdd(arr, arr2) {
arr.sort((a, b) => a - b);
arr2.sort((a, b) => a - b);
var res = new Array(arr.length + arr2.length);
for (var i = 0; i < arr.length; i++)
res[i] = arr[i];
for (var i = 0; i < arr2.length; i++)
res[arr.length + i] = arr2[i];
return res;
}
console.log(ArrayAdd(arr, arr2))