C# куб / многомерный набор данных
Я работаю над проблемой, где мне нужно обрабатывать многомерные данные в памяти с помощью C#. Мое требование напоминает кубы OLAP, но не так сложно. например, мне не нужны вычисления или агрегация или тому подобное. Я в основном хотел бы ссылаться на данные, используя многомерные ключи. например:
var key = new Key();
key["Dim1"] = "DimValue1";
key["Dim2"] = "DimValue2";
key["Time"] = 1999;
DataSet[key] = 4.43434m;
И это позволило бы мне перебирать значения или срезы набора данных. Вы сталкивались с такой библиотекой в C#?
3 ответа
Это может не соответствовать вашим потребностям, но я нашел простой способ работы с многоключевыми наборами данных, это создать объект, который содержит все ваши ключевые поля и ключи значений (столько, сколько вам нужно) и затем создайте выражения Lookup для каждого из ваших ключей.
Например:
class MyData
{
// Your keys
public string Dim1;
public string Dim2;
public string Time;
// Your values
public string Value;
}
будет "проиндексирован" и получен так:
// add all your data to a list or collection
var data = new List<MyData>();
// this provides the entry point to our dataset
var lookupDim1 = data.ToLookup(d => d.Dim1);
var lookupDim2 = data.ToLookup(d => d.Dim2);
var lookupTime = data.ToLookup(d => d.Time);
// sample retrievals
IEnumerable<MyData> sampleData1 = lookupDim1["DimValue1"];
var sampleData2 = lookupDim2["DimValue2"].Intersect( lookupTime["1999"] );
Вы можете создать словарь, в котором тип ключа - это структура, которую вы объявляете. Это не дает вам автоматической итерации срезов, хотя вы можете добиться этого с помощью фильтрации.
Я думаю, что хранилище ключей / значений, такое как MongoDB и Redis, близко к тому, что мне нужно. Однако я не уверен на 100%. Так как мне наплевать на упорство, в памяти история вроде Redis больше подходит.