二维数组的列排序

来源:互联网 发布:知柏地黄丸治疗性早熟 编辑:程序博客网 时间:2024/05/16 23:04

定义数组

double[,] WorkColor = new double[15, 5]

排序类

   public class Order    {        /**//// <summary>        /// 对二维数组排序        /// </summary>        /// <param name="values">排序的二维数组</param>        /// <param name="orderColumnsIndexs">排序根据的列的索引号数组</param>        /// <param name="type">排序的类型,1代表降序,0代表升序</param>        /// <returns>返回排序后的二维数组</returns>        public static double[,] Orderby(double[,] values, int[] orderColumnsIndexs, int type)        {            double[] temp = new double[values.GetLength(1)];            int k;            int compareResult;            for (int i = 0; i < values.GetLength(0); i++)            {                for (k = i + 1; k < values.GetLength(0); k++)                {                    if (type.Equals(1))                    {                        for (int h = 0; h < orderColumnsIndexs.Length; h++)                        {                            compareResult = Comparer.Default.Compare(GetRowByID(values, k).GetValue(orderColumnsIndexs[h]), GetRowByID(values, i).GetValue(orderColumnsIndexs[h]));                            if (compareResult.Equals(1))                            {                                temp = GetRowByID(values, i);                                Array.Copy(values, k * values.GetLength(1), values, i * values.GetLength(1), values.GetLength(1));                                CopyToRow(values, k, temp);                            }                            if (compareResult != 0)                                break;                        }                    }                    else                    {                        for (int h = 0; h < orderColumnsIndexs.Length; h++)                        {                            compareResult = Comparer.Default.Compare(GetRowByID(values, k).GetValue(orderColumnsIndexs[h]), GetRowByID(values, i).GetValue(orderColumnsIndexs[h]));                            if (compareResult.Equals(-1))                            {                                temp = GetRowByID(values, i);                                Array.Copy(values, k * values.GetLength(1), values, i * values.GetLength(1), values.GetLength(1));                                CopyToRow(values, k, temp);                            }                            if (compareResult != 0)                                break;                        }                    }                }            }            return values;        }//打印数组       public static void Print(double[,] values)        {            int k;            for (int i = 0; i < values.GetLength(0);i++ )            {                for (k = 0; k < values.GetLength(1);k++ )                {                    Console.Write(values[i,k]);                    Console.Write("\t");                }                Console.WriteLine(" ");            }     }        /**//// <summary>        /// 获取二维数组中一行的数据        /// </summary>        /// <param name="values">二维数据</param>        /// <param name="rowID">行ID</param>        /// <returns>返回一行的数据</returns>        static double[] GetRowByID(double[,] values, int rowID)        {            if (rowID > (values.GetLength(0) - 1))                throw new Exception("rowID超出最大的行索引号!");            double[] row = new double[values.GetLength(1)];            for (int i = 0; i < values.GetLength(1); i++)            {                row[i] = values[rowID, i];            }            return row;        }        /**//// <summary>        /// 复制一行数据到二维数组指定的行上        /// </summary>        /// <param name="values"></param>        /// <param name="rowID"></param>        /// <param name="row"></param>        static void CopyToRow(double[,] values, int rowID, double[] row)        {            if (rowID > (values.GetLength(0) - 1))                throw new Exception("rowID超出最大的行索引号!");            if (row.Length > (values.GetLength(1)))                throw new Exception("row行数据列数超过二维数组的列数!");            for (int i = 0; i < row.Length; i++)            {                values[rowID, i] = row[i];            }        }    }


原创粉丝点击