private static void ExtractUniqueRows(MatrixIndexer data, out Dictionary <EquatableArray <double>, List <int> > rowIndexMap, out double[][] reducedData) { var uniqueRows = new List <double[]>(); rowIndexMap = new Dictionary <EquatableArray <double>, List <int> >(); for (int row = 0; row < data.RowCount; row++) { var rowArray = data.GetRow(row).ToArray(); var rowEqArray = new EquatableArray <double>(rowArray); if (!rowIndexMap.ContainsKey(rowEqArray)) { rowIndexMap.Add(rowEqArray, new List <int>()); uniqueRows.Add(rowArray); } rowIndexMap[rowEqArray].Add(row); } reducedData = uniqueRows.ToArray(); }
public static void Evaluate(MergeAction action, Table targetTable, Row row, IOutputSink sink, Scope scope) { Row GetTargetRow() => row.Sources[EquatableArray.Of(scope.ExpandTableName(new[] { targetTable.Name }))]; switch (action) { case InsertMergeAction insert: Evaluate(targetTable, insert.Columns, insert.Source, new RowArgument(row), sink, scope); return; case UpdateMergeAction update: Evaluate(update.SetClauses, GetTargetRow(), row, sink, scope); return; case DeleteMergeAction _: var r = GetTargetRow(); sink.Deleted(r, scope.Env); targetTable.Rows.Remove(r); return; default: throw FeatureNotSupportedException.Subtype(action); } }