В .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
в качестве значения.
Я предпочитаю решения, использующие синтаксис LINQ (возможно, облегчая объединение этого с преобразованием / фильтрацией / упорядочением ...).