【发布时间】:2019-10-10 08:30:18
【问题描述】:
在 .NET / C# 中,我输入了 IEnumerable<T> 类型的数据,T 具有一些我想用于查找的属性。
如何使用LanguageExt 构建两级(可能是三级)查找,而不产生像这样难以阅读的代码:
var items = Range(1, 1000)
.Map(i => new
{
Number = i,
Section = (byte) (i % 10),
Text = $"Number is i"
}); // just some test data
HashMap<byte, HashMap<int, string>> lookup
= toHashMap(
from item in items
group item.Text by (item.Section, item.Number) into gInner
group gInner by gInner.Key.Section into gOuter
select ( gOuter.Key, toHashMap(gOuter.Map(_ => (_.Key.Number, _.Head()))) )
);
预期输出:以Section 作为外键、Number 作为内键、Text 作为值的查找 hashmap。
我更喜欢使用 LINQ 语法的解决方案(也许可以更轻松地将其与转换/过滤/排序结合起来......)。
【问题讨论】:
-
能否提供输入/输出数据描述/示例?回答你的问题会更容易。
-
问题已更新。注意:
Section和Number应该被视为不相关的属性。
标签: c# linq hashmap ienumerable language-ext