Добавление 2 списков массивов в один 2-мерный массив

#c# #arrays #arraylist

#c# #массивы #список массивов

Вопрос:

Я пытаюсь добавить два списка массивов в 2-мерный массив, но я сталкиваюсь с проблемой. Если я заполню массив вручную, показанный в приведенном ниже коде как array arr1, и привяжу этот массив к диаграмме, диаграмма отобразится так, как ожидалось. Однако, когда я добавляю два списка массивов в массив с помощью цикла for и привязываю этот массив к диаграмме, он отображается не так, как ожидалось.

Мой код:

 DateTime date1 = new DateTime(2012, 10, 1);
DateTime date2 = new DateTime(2012, 11, 2);
DateTime date3 = new DateTime(2012, 12, 3);
DateTime date4 = new DateTime(2013, 01, 4);
DateTime date5 = new DateTime(2013, 02, 8);

//Create time arraylist
ArrayList al1 = new ArrayList();
al1.Add(date1);
al1.Add(date2);
al1.Add(date3);
al1.Add(date4);
al1.Add(date5);

int int1 = 9;
int int2 = 15;
int int3 = 20;
int int4 = 13;
int int5 = 17;

//Create int arraylist
ArrayList al2 = new ArrayList();
al2.Add(int1);
al2.Add(int2);
al2.Add(int3);
al2.Add(int4);
al2.Add(int5);

//Tester 2D array
Object[,] arr1 = new Object[,] { {date1, int1}, {date2, int2}, {date3, int3}, {date4,int4}, {date5, int5} };

//Create 2D array
Object[,] arr = new Object[2, al2.Count];

for (int k = 0; k <al2.Count; k  )
        {
            arr[0, k] = al1[k];
            arr[1, k] = al2[k];
        }

Data d1 = new Data(arr);

Series s1 = new Series { Name = "Series 1", Data=d1};

DotNet.Highcharts.Highcharts chart = new DotNet.Highcharts.Highcharts("chart");

chart.SetXAxis(new XAxis
{
Type = AxisTypes.Datetime
});

chart.SetSeries(s1);

ltrChart.Text = chart.ToHtmlString();
 

Является ли моя проблема с добавлением списков массивов в массив или это что-то в высоких диаграммах dotnet?

Комментарии:

1. И каковы два результата. Каков ожидаемый и каков фактический результат?

2. Ожидаемые результаты — линейный график времени против int, { {1/10/2012, 9} {2/11/2012, 15} etc }, что я получаю, когда использую массив arr1. Результат, когда я использую arr array, — это всего две точки на графике, { {1/1/1970, 15}, {30/09/2012, 131581440000} }

3. Взгляните на это руководство .

4. если вы не застряли на .Net 2.0, не используйте ArrayList , если «HighCharts» принимает только многомерный ArrayList , не используйте «HighCharts».

Ответ №1:

Ваш цикл создает другой массив, потому что вы перепутали размеры. Сделайте это так:

 Object[,] arr = new Object[al2.Count, 2];

for (int k = 0; k < al2.Count; k  )
{
    arr[k, 0] = al1[k];
    arr[k, 1] = al2[k];
}
 

Комментарии:

1. Вы также можете проверить наличие al1. Count == al2. Считайте, иначе это могло бы вызвать исключение.

2. @fabigler Он заполняет их вручную в коде, как они могут иметь разные размеры? И даже если он этого не сделал, если они это сделают, где-то еще есть ошибка. Исправьте это тогда.

Ответ №2:

Вы также можете попробовать a List<KeyValuePair<Date,int>> и заполнить свой 2D-массив оттуда, или, если даты уникальны, a Dictionary<Date, int>