0

我尝试解决一个电话业务问题,比如说有非常庞大的通话记录,每个通话记录主要包含“主叫号码”、“被叫号码”、“开始日期时间”、“持续时间”。

原始数据存储在 excel 中,我已将它们导入到 infragistics 的 ultragrid 控件中,例如 grid_A。

我想要做的是:对于grid_A外的某个通话记录,搜索grid_A并查找是否有匹配的记录。匹配意味着两条记录具有相同的“呼叫者号码”,“被叫号码”,并且两条记录具有相似“开始日期时间”,“持续时间”,例如,他们的“开始日期时间”是
00:10:00 和 00:12:00 ,仅相差 2 分钟。

因为这样的比较也会进行很多次并且当前的搜索代码太慢,我想如果我可以将网格数据更改为树结构。树i图像是这样的形式:
第一层是“caller num”,假设“caller num”有100个节点,下面是“caller num”,假设每个“caller num”,可能有1-10个“称为num”最后一级是“开始时间”和“持续时间”。

我想知道的是:如果这个结构可以用c#完成以及如何做到这一点,这个结构是否可以大大改善我的搜索。

期待您的帮助。

4

1 回答 1

0

我想要做的是:对于grid_A之外的某个通话记录,搜索grid_A并查找是否有匹配的记录。匹配意味着两条记录具有相同的“呼叫者号码”,“被叫号码”,并且两条记录具有相似“开始日期时间”,“持续时间”,例如,他们的“开始日期时间”是 00:10:00 和 00:12:00 ,仅相差 2 分钟。

听起来您正在尝试对网格中显示的记录进行搜索,尽管我承认我在解析您的语言时遇到了困难。

如果是这种情况,并且由于您只有四列,我建议Dictionary<string, IEnumerable<object>>在您的所有记录上创建一个索引 (),将其作为键caller num并将called num其存储(值将是与给定键匹配的行对象)。然后,您可以有效地找到匹配的候选者,并使用 Linq 对(理想情况下更小的)记录子集进行排序,以找到进一步符合您条件的记录。

事实上,考虑到这一点,这种方法将问题变成了 map-reduce 问题,其中 map 阶段是查询各个索引条目以找到匹配的条目。linq 查询可以并行执行,以进一步加快执行时间。

于 2013-03-22T15:58:34.863 回答