C# C多维数组

C# C多维数组,c#,arrays,visual-studio,xaml,C#,Arrays,Visual Studio,Xaml,我对自己的工作有点困惑,我似乎把我的问题复杂化了 我从一个呼叫拨号器中提取数据,这个拨号器记录所有代理的所有呼叫,每个代理都在一个队列中,同一队列中可以有多个代理 我用SQL进行的基本计算我可以提取每小时的日期、队列、小时数和呼叫数,如下所示: callDate queueid cHour numberOfCalls 2013-05-03 No Queue 0 1 2013-05-03 No Queue 2 1 2

我对自己的工作有点困惑,我似乎把我的问题复杂化了

我从一个呼叫拨号器中提取数据,这个拨号器记录所有代理的所有呼叫,每个代理都在一个队列中,同一队列中可以有多个代理

我用SQL进行的基本计算我可以提取每小时的日期、队列、小时数和呼叫数,如下所示:

callDate    queueid    cHour    numberOfCalls
2013-05-03  No Queue     0            1
2013-05-03  No Queue     2            1
2013-05-03  No Queue     6            1
2013-05-03  No Queue     7            7
2013-05-03  No Queue     8            6
2013-05-03  No Queue     9            14
2013-05-03  No Queue     10           6
2013-05-03  No Queue     11           5
2013-05-03  No Queue     12           8
2013-05-03  17001        7            114
2013-05-03  17001        8            238
2013-05-03  17001        9            227
2013-05-03  17001        10           190
2013-05-03  17001        11           221
2013-05-03  17001        12           73
2013-05-03  17002        6            3
2013-05-03  17002        7            125 
在那里你可以看到排队的队伍,时间和那个小时的电话数量是早上7点,早上8点。。。等等

我需要知道我是否创建了一个多维数组来存储队列,每个队列的小时数和呼叫数,如果有意义的话,每个小时的呼叫数是多少?这样我以后就可以用它作为图表了

以下是我一直坚持的示例代码:

Xaml:

C:


我不确定你想要达到什么目标,但类似的事情可能会有所帮助

Dictionary<DateTime, Dictionary<string, KeyValuePair<int,int>>> dicData
DateTime是您的DateTime,string是您的队列和int,KeyValuePair中的int是hour和numberOfCall对

编辑1:

实际上,它必须是KeyValuePair的列表。下面是一个例子:

Dictionary<DateTime, Dictionary<string, List<KeyValuePair<int, int>>>> dicData = new Dictionary<DateTime, Dictionary<string, List<KeyValuePair<int, int>>>>();
        //dt is your result from SQL query
        foreach (DataRow dr in dt.Rows)
        {
            DateTime dtm = DateTime.Parse(dr["DateTime"].ToString());
            string queue = dr["Queue"].ToString();
            int hours = int.Parse(dr["Hours"].ToString());
            int cycles = int.Parse(dr["Cycles"].ToString());

            //Adding Distinct DateTime objects as Key
            if(!dicData.ContainsKey(dtm))
            {
                dicData[dtm] = new Dictionary<string, KeyValuePair<int, int>>();
            }

            //Adding distinct Queue object as Key under the DateTime dictionary
            if (!dicData.ContainsKey(queue))
            {
                dicData[dtm][queue] = new List<KeyValuePair<int, int>>();
            }
            dicData[dtm][queue].Add(new KeyValuePair<int, int>(hours, cycles));
        }
编辑

所以,在你的阅读过程中,你可以

while (reader.Read())
{
    var callHour = new CallHour(
        DateTime.ParseExact("yyyy-mm-dd", reader.GetString(0)),
        reader.GetInt32(2),
        reader.GetInt32(3),
        reader.IsDBNull(1) ? null : reader.GetInt32(1));

    callHours.Add(callHour.Time, callHour);
}
创建一个类,你可以称之为CallHour,然后你可以有一些CallHour的通用集合。该泛型集合将支持IEnumerable,可能还支持IList

然后,您可以声明一个排序列表,并添加您的第一个小时

var callHours = new SortedList<DateTime, CallHour>();

var someCallHour = new CallHour(
    DateTime.Parse("2013-05-03 00:00:00"), 0, 1);

callHours.Add(someCallHour.Time, someCallHour);

请阅读“谢谢”,但我不知道如何用别的词来表达这个问题,因此这是一个很长的问题。不要用多维数组来表示任何东西。哈哈,这看起来很可怕use@Silentdarkness,不是真的,如果你想要一个有多个边界的数组,就使用一个锯齿数组。这是可行的,你能给我提供一个实际的例子来帮助我解决这个问题吗?这将是我第一次使用它,但使sence.DataTable dt=新DataTable;您可以用SqlDataAdapter填充它,比如da by:da.Filldt;
while (reader.Read())
{
    var callHour = new CallHour(
        DateTime.ParseExact("yyyy-mm-dd", reader.GetString(0)),
        reader.GetInt32(2),
        reader.GetInt32(3),
        reader.IsDBNull(1) ? null : reader.GetInt32(1));

    callHours.Add(callHour.Time, callHour);
}
public class CallHour
{
     private readonly DateTime time;

     public CallHour(
            DateTime day,
            int hour,
            int callCount,
            int? queueId = null)
     {
         this.hour = new DateTime(
             day.Year,
             day.Month,
             day.Day,
             hour,
             0,
             0,
             0);

         this.CallCount = callCount;
         this.QueueId = queueId;
     }

     public DateTime Time
     {
         get
         {
             return this.time;
         }
     }

     public int? QueueId { get; set; }
     public int CallCount { get; set; }
}    
var callHours = new SortedList<DateTime, CallHour>();

var someCallHour = new CallHour(
    DateTime.Parse("2013-05-03 00:00:00"), 0, 1);

callHours.Add(someCallHour.Time, someCallHour);