定义数组
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];
}
}
}