#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>