У меня есть модель с несколькими периодами времени, и я получаю некоторые данные в формате кортежа с измерением времени. Таким образом, исходный набор кортежей является надмножеством набора кортежей, требуемого для каждого периода времени. У меня также есть массив целых чисел, которые представляют периоды времени. При предварительной обработке мне нужно выполнить итерацию по этим данным и проанализировать каждый период времени отдельно. Я полагаю, что могу значительно сократить время предварительной обработки, разделив исходный набор кортежей на его подмножества на основе периодов времени, а затем итерируя каждый из них независимо во время предварительной обработки.
В файле данных:
timeSet = {1 2};
dataset = {
//<attribute1, attribut2, timePeriod>
<a,b,1>
<a,c,1>
<a,b,2>
<a,b,2>
};
В файл мода:
{int} timeSet = ...;
tuple data {string attribOne; string attribTwo; int time;};
{data} dataset = ...;
Я не знаю заранее, сколько будет временных периодов, поэтому, если я не могу разделить кортеж на лету, мне нужно будет сделать что-то вроде this:
execute{
for(var t in timeSet) {
for(var r in dataSet) {
if(r.Time == t) {
//call a function that executes on r
}
}
}
}
Однако я хочу избежать вышеприведенного кода, потому что он требует итерации по всей совокупности dataSet для каждого временного набора. Если бы я мог разбить dataSet на несколько кортежей или массивов на основе значения поля времени, то я мог бы заменить вышеприведенное на что-то вроде следующего:
execute{
for(var t in timeSet) {
for(var r in dataSetsCollection[t]) {
//call a function that executes on r
}
}
}
Можно ли создать такой элемент, как dataSetsCollection из кода выше? Я попытался сделать это с помощью кортежа:
tuple TdataSetsCollection {data row;};
{TdataSetsCollection} dataSetsCollection = {<ds> | ds in dataset : ds.Time = t};
и массива:
tuple TdataSetsCollection {data row;};
TdataSetsCollection DataSetsArr[t in TimeSet] = [t : ds | ds in datasets, t in TimeSet : ds.Time == t];
Ничего из вышеперечисленного не сработало, поэтому я в данный момент застрял.
У меня кросс-пост на этот вопрос .