Примирить 2 массива с различной длиной С#

У меня есть два массива, которые должны использоваться в качестве входов по оси x на диаграмме с использованием ChartDirector (http://www.advsofteng.com/product.html) в моем приложении С#/.NET Windows Forms.

Один из массивов не совпадает по длине с другим, что приводит к случайному отображению более короткого массива на диаграмме. Мне нужно создать новый массив, который берет короткий в качестве ввода и заполняет оставшиеся значения как 0 эквивалентов (Chart.NoValue) здесь, так что длины обоих массивов равны.

Есть ли способ сделать это, не скопировав короткий массив в новый и заполнив оставшиеся значения 0, следующим образом:

******[] newArray = new ******[longArray.Length];
for (int i = 0; i < shortArray.Length; i++)
{
 newArray[i] = shortArray[i];
}
for (i = shortArray.Length; i < newArray.Length; i++)
{
 newArray[i] = Chart.NoValue; 
}
//Chart director equivalent of 0, in terms of chart visibility

По сути, я спрашиваю, есть ли способ просто изменить shortArray таким образом, чтобы в конце добавлялись новые элементы "0", чтобы длина равнялась longArray.

3 ответа

Для изменения размера массива можно использовать метод Array.Resize http://msdn.microsoft.com/en-us/library/bb348051.aspx.

Если newSize больше длины старого массива, выделяется новый массив, и все элементы копируются из старого массива в новый. Если newSize меньше длины старого массива, выделяется новый массив и элементы копируются из старого массива в новый, пока новый не будет заполнен; остальные элементы в старом массиве игнорируются. Если newSize равен длине старого массива, этот метод ничего не делает. источник: http://msdn.microsoft.com/en-us/library/bb348051.aspx


******[] newArray = new ******[longArray.Length];
Array.Copy(shortArray, newArray, shortArray.Length);

Если новые элементы должны быть Chart.NoValue вместо 0, то вот еще одно решение:

******[] newArray = Enumerable.Repeat(Chart.NoValue, longArray.Length).ToArray();
Array.Copy(shortArray, newArray, shortArray.Length);


Массивы в С# имеют фиксированную длину, поэтому вы не можете мутировать существующий экземпляр. Вам нужно создать новый массив и заполнить его с помощью Chart.NoValue.

Тем не менее, вы можете заменить первый цикл эквивалентным (и более быстрым)

shortArray.CopyTo(newArray, 0);

licensed under cc by-sa 3.0 with attribution.