c# - DataTable 列计算的最有效排序计算

标签 c# .net algorithm ado.net

假设您有一个包含“id”、“cost”、“qty”列的数据表:

DataTable dt = new DataTable();
dt.Columns.Add("id", typeof(int));
dt.Columns.Add("cost", typeof(double));
dt.Columns.Add("qty", typeof(int));

它以“id”为键:

dt.PrimaryKey = new DataColumn[1] { dt.Columns["id"] };

现在我们感兴趣的是单位数量的成本。所以,换句话说,如果你有一排:

id | cost  | qty
----------------
42 | 10.00 | 2

单位数量的成本为 5.00

那么我的问题是,鉴于前面的表格,假设它由数千行构成,并且您对前 3 位每数量成本 行感兴趣。所需的信息是id每数量成本。您不能使用 LINQ。

在 SQL 中这是微不足道的;在没有 LINQ 的情况下,您如何BEST(最有效地)在 C# 中完成它?

更新:求不修改表格的答案。

最佳答案

我不确定这是否最好,但它胜过排序然后选择时间复杂度为 O(n log n) 的前三个元素。

您可以使用优先级队列来过滤前三个元素。有关 .Net 优先级队列实现的信息可用 here .

基本思路是将你的数据表的前三个元素插入到优先级队列中。然后依次添加所有剩余元素,每次添加后删除顶部元素。之后留在优先级队列(堆)中的元素将是前三名元素。

无需修改表格,只需添加另一列(您只需定义相对排序/优先级标准)并且不会更改表格元素的顺序。时间复杂度为 O(n log 3) = O(n)。

关于c# - DataTable 列计算的最有效排序计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2953147/

相关文章:

c# - 类应该同时实现 IAsyncDisposable 和 IDisposable 吗?

c# - Windows 安全自定义登录验证

php - 使用 PHP 关联数组查找笛卡尔积

algorithm - 需要对量子模型的解释

c# - 如何在彭博获取实时价格快照?

c# - 从 C# 应用程序调用 azure powershell cmdlet 失败

c# - 将逻辑放入 ViewModel get'ers

c# - 将 int 值分配给自定义枚举属性

.net - 软件带宽/数据库增长公式

algorithm - 任意点网格的拓扑排序?