private DataComparer ConfigureComparer() { DataComparer comparer = this.DimensionProperty.Comparer; //Si no esta definido el tipo de orden por defecto hace falta segun que tipos aplicar //un tipo por defecto if (this.OrderDimensionProperty == OrderTypeEnum.NotDefined) { switch (this.DimensionProperty.DisplayType) { case VariableTypeEnum.Discrete: //ordenar ascendente return(comparer); case VariableTypeEnum.Continuous: //ordenar ascendente return(comparer); case VariableTypeEnum.Nominal: //nada return(null); case VariableTypeEnum.Ordinal: //todo: aqui entraria un enumerado (¿y puede que un string???), ordenar por el enumerado //Este no tiene ordenacion por defecto, es parecido al nominal return(comparer); default: throw new NotSupportedException(); } } else { if (this.OrderDimensionProperty == OrderTypeEnum.Descending) { comparer.Descending = true; } switch (this.DimensionProperty.DisplayType) { case VariableTypeEnum.Discrete: return(comparer); case VariableTypeEnum.Continuous: return(comparer); case VariableTypeEnum.Nominal: return(comparer); case VariableTypeEnum.Ordinal: //todo: aqui entraria un enumerado (¿y puede que un string???), ordenar por el enumerado return(comparer); default: throw new NotSupportedException(); } } }
/// <summary> /// Esta funcion se encarga de ordenar los datos de salida segun la configuracion indicada a traves del /// objeto comparador /// </summary> /// <param name="output"></param> /// <param name="comparer"></param> private void SortOutputData(OutputSeries outputSeries, DataComparer comparer) { //var a1 =output.VariableData; //var a2 = output.DimensionData; //var a3 = output.ZVariableData; object auxVariable = null; object auxDimension = null; object auxZVariable = null; //la z puede o no aparecer bool checkZ = (outputSeries.ZVariableData != null && (outputSeries.DimensionData.Length == outputSeries.ZVariableData.Length)); bool ordered = true; do { ordered = true; for (int i = 0; i < outputSeries.DimensionData.Length - 1; ++i) { if (comparer.Compare(outputSeries.DimensionData[i], outputSeries.DimensionData[i + 1]) > 0) { ordered = false; auxVariable = outputSeries.VariableData[i]; outputSeries.VariableData[i] = outputSeries.VariableData[i + 1]; outputSeries.VariableData[i + 1] = auxVariable; auxDimension = outputSeries.DimensionData[i]; outputSeries.DimensionData[i] = outputSeries.DimensionData[i + 1]; outputSeries.DimensionData[i + 1] = auxDimension; if (checkZ) { auxZVariable = outputSeries.ZVariableData[i]; outputSeries.ZVariableData[i] = outputSeries.ZVariableData[i + 1]; outputSeries.ZVariableData[i + 1] = outputSeries.ZVariableData[i]; } } } } while (ordered == false); }