C# 如何将datagrid数据转换为树状结构,是否可以提高搜索速度?

C# 如何将datagrid数据转换为树状结构,是否可以提高搜索速度?,c#,C#,我试图解决一个电话业务问题,比如说有非常庞大的通话记录,每个记录主要包括“来电号码”、“被叫号码”、“开始日期时间”、“持续时间” 原始数据存储在excel中,我已将其导入infragistics的ultragrid控件, 说它是网格 我想做的是:对于网格a之外的某个通话记录,搜索网格a并查找是否有匹配的记录。匹配意味着这两个记录具有相同的“caller num”、“called num”,并且这两个记录具有相似的“start datetime”、“duration time”,例如,它们的“s

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

原始数据存储在excel中,我已将其导入infragistics的ultragrid控件, 说它是网格

我想做的是:对于网格a之外的某个通话记录,搜索网格a并查找是否有匹配的记录。匹配意味着这两个记录具有相同的“caller num”、“called num”,并且这两个记录具有相似的“start datetime”、“duration time”,例如,它们的“start datetime”是
00:10:00和00:12:00,只差2分钟

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

我想知道的是:如果这个结构可以用c#实现,以及如何实现,这个结构是否可以大大改进我的搜索

期待你的帮助

我想做的是:对于grid_a之外的某个通话记录,搜索grid_a并查找是否有匹配的记录。匹配意味着这两个记录具有相同的“caller num”、“called num”,并且这两个记录具有相似的“start datetime”、“duration time”,例如,它们的“start datetime”是 00:10:00和00:12:00,只差2分钟

听起来你好像在试图搜索网格中显示的记录,尽管我承认我在解析你的语言时遇到了困难

如果是这种情况,并且由于您只有四列,我建议您在所有记录上创建一个索引(
Dictionary
),该索引接受
调用方num
调用的num
,并将其存储为键(该值将是与给定键匹配的行对象)。然后,您可以高效地找到匹配的候选项,并使用Linq对记录子集(理想情况下更小)进行排序,以找到进一步满足条件的记录


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

为什么不将信息存储在
数据库中
您可以将excel文件中的数据导入SQL Server,例如使用
DTS
或SSIS`甚至可以创建自己的导出/导入类将数据提取到SQL Server中您自己的对象并从那里进行搜索..为什么要将信息存储到
树中
不确定。。我认为将数据存储到DataGridView中是完美的..听起来问题不在于DataGrid,而在于如何存储数据并进行搜索。。您是否有当前/现有的代码来显示您是如何执行此操作的?我提到的树不是treeview控件,它类似于二叉树或其他东西。我不想将这些数据保存到数据库中,因为原始excel文件来自不同的公司,具有不同的格式,我真正需要的只是我提到的四列,但如果我尝试将它们存储到数据库中,那么对于每种格式,我必须编写一个不同的“存储到数据库”方法。您可以使用
enum
创建自己的文件结构来布局文件结构,这不是很难,我认为您个人正在使这变得比需要的更难。。您可以亲自将这些数据存储到自定义列表、列表、词典或哈希表中,而不必查看您当前拥有的内容。我所能做的就是根据您的需求提供更好的解决方案。。和二叉树。。不过,我认为有更好的方法来解决您的问题,并提供更有效的解决方案。数据库不应该妨碍你。这是作为一名编码员的乐趣。你可以根据需要编写代码,使此工作正常进行。如果你知道不同公司的文件布局,你仍然可以动态创建此文件,使其正常工作。相信我,我是为国防部的一份大型合同而做的,我一直在工作,从来没有任何合同读取分隔文件/搜索时出现问题。您说过:获取调用者num和被调用者num并将其存储为键。如果我没有犯错误,您的意思是组合调用者num和被调用者num,并生成一个hashcode作为键。但是在网格中,有许多记录具有相同的调用者num和被调用者num,因此hashcode不会唯一,键允许重复吗?在这种情况下,是的-您不需要生成hash代码-只需将它们作为字符串组合,让字典为您生成哈希代码。对于同一个键下的多个项,字典值是IEnumerable,因此所有这些项都被收集并放在一个字典键下。