如何在c#中有效地连接多个Deedle系列
本文关键字:Deedle 系列 连接 有效地 | 更新日期: 2023-09-27 18:13:18
我想用deedle将数百个系列连接到一个框架中。实现这一目标的最佳功能方式是什么?
直接的(命令式的)想法是在循环之外创建一个框架对象持有者。然后在循环中,该对象被用作序列连接的左侧。
再想想,C#
尾递归?我做了一些研究,我有点失落,因为c#是否可以做尾部递归。在Tomas的书《函数式编程的现实世界》中只有f #
的例子
还有人有数百列(1000行)的针框吗?对性能有很大影响吗?这听起来有点过分,但在电子表格中很常见
欢迎提出任何建议。谢谢你!casbby
创建框架的正确方法取决于您的数据来自何处。
如果你已经有了所有的系列,你想创建一个包含它们作为列的框架,那么Frame.FromColumns
方法可能是你要走的路。该方法接受一个键值对的集合,其中键是列名,值是列(系列)。
下面是一个最小的示例,它创建了一个带有名称和系列的键值对数组:
var cols = new KeyValuePair<string, Series<int, object>>[]{
KeyValue.Create("IDs", (new object[] {1,2,2}).ToOrdinalSeries() ),
KeyValue.Create("Namess", (new object[] {"A", "B", "C"}).ToOrdinalSeries() )
};
var frame = Frame.FromColumns(cols);
我假设在您的情况下,您已经在某个集合中拥有该系列,因此函数方法是使用LINQ和Select
将数据投影为正确的格式。所以你的代码可能看起来像这样:
var cols = someSource.Select(item =>
KeyValue.Create(item.Key, item.Series));
var frame = Frame.FromColumns(cols);
FromColumns
操作在封面下使用外连接,但它是优化的(例如,如果您有具有相同索引的系列)。在Deedle的c#文档中有很多额外的例子