C# C多维数组
我对自己的工作有点困惑,我似乎把我的问题复杂化了 我从一个呼叫拨号器中提取数据,这个拨号器记录所有代理的所有呼叫,每个代理都在一个队列中,同一队列中可以有多个代理 我用SQL进行的基本计算我可以提取每小时的日期、队列、小时数和呼叫数,如下所示: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
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);