using System;
using System.Collections;
using System.Linq;
public class Test
{
class Array2DComparer : IComparer
{
public int Compare(object a, object b)
{
int[] x = (int[])a;
int[] y = (int[])b;
for (int index = 0; index < x.Length; index++)
{
if (x[index] > y[index])
{
return 1;
}
if (x[index] < y[index])
{
return -1;
}
}
return 0;
}
}
static int[][] ConvertToJagged(int[,] rectangularArray)
{
int rows = rectangularArray.GetLength(0);
int cols = rectangularArray.GetLength(1);
int[][] jaggedArray = new int[rows][];
for (int row = 0; row < rows; row++)
{
int[] item = new int[cols];
for (int col = 0; col < cols; col++)
{
item[col] = rectangularArray[row, col];
}
jaggedArray[row] = item;
}
return jaggedArray;
// либо в одну строчку с помощью LINQ
// return Enumerable.Range(0, array.GetLength(0)).Select(row => Enumerable.Range(0, array.GetLength(1)).Select(col => array[row, col]).ToArray()).ToArray();
}
static int[,] ConvertToRectangular(int[][] jaggedArray)
{
int rows = jaggedArray.Length;
int cols = jaggedArray[0].Length;
int[,] rectangularArray = new int[rows, cols];
for (int row = 0; row < rows; row++)
{
for (int col = 0; col < cols; col++)
{
rectangularArray[row, col] = jaggedArray[row][col];
}
}
return rectangularArray;
}
static void Main(string[] args)
{
int[,] rectangularArray = {
{ 3, 0, 2 },
{ 3, 0, 1 },
{ 2, 1, 5 },
{ 3, 1, 6 },
{ 4, 2, 8 }
};
int[][] jaggedArray = ConvertToJagged(rectangularArray);
Array.Sort(jaggedArray, new Array2DComparer());
foreach (var item in jaggedArray)
{
Console.WriteLine(string.Join(" ", item));
}
rectangularArray = ConvertToRectangular(jaggedArray);
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnM7CnVzaW5nIFN5c3RlbS5MaW5xOwoKcHVibGljIGNsYXNzIFRlc3QKewoJY2xhc3MgQXJyYXkyRENvbXBhcmVyIDogSUNvbXBhcmVyCiAgICB7CiAgICAgICAgcHVibGljIGludCBDb21wYXJlKG9iamVjdCBhLCBvYmplY3QgYikKICAgICAgICB7CiAgICAgICAgICAgIGludFtdIHggPSAoaW50W10pYTsKICAgICAgICAgICAgaW50W10geSA9IChpbnRbXSliOwoKICAgICAgICAgICAgZm9yIChpbnQgaW5kZXggPSAwOyBpbmRleCA8IHguTGVuZ3RoOyBpbmRleCsrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAoeFtpbmRleF0gPiB5W2luZGV4XSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoeFtpbmRleF0gPCB5W2luZGV4XSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAgIH0KCiAgICBzdGF0aWMgaW50W11bXSBDb252ZXJ0VG9KYWdnZWQoaW50WyxdIHJlY3Rhbmd1bGFyQXJyYXkpCiAgICB7CiAgICAgICAgaW50IHJvd3MgPSByZWN0YW5ndWxhckFycmF5LkdldExlbmd0aCgwKTsKICAgICAgICBpbnQgY29scyA9IHJlY3Rhbmd1bGFyQXJyYXkuR2V0TGVuZ3RoKDEpOwoKICAgICAgICBpbnRbXVtdIGphZ2dlZEFycmF5ID0gbmV3IGludFtyb3dzXVtdOwoKICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCByb3dzOyByb3crKykKICAgICAgICB7CiAgICAgICAgICAgIGludFtdIGl0ZW0gPSBuZXcgaW50W2NvbHNdOwoKICAgICAgICAgICAgZm9yIChpbnQgY29sID0gMDsgY29sIDwgY29sczsgY29sKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGl0ZW1bY29sXSA9IHJlY3Rhbmd1bGFyQXJyYXlbcm93LCBjb2xdOwogICAgICAgICAgICB9CgogICAgICAgICAgICBqYWdnZWRBcnJheVtyb3ddID0gaXRlbTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBqYWdnZWRBcnJheTsKCiAgICAgICAgLy8g0LvQuNCx0L4g0LIg0L7QtNC90YMg0YHRgtGA0L7Rh9C60YMg0YEg0L/QvtC80L7RidGM0Y4gTElOUQogICAgICAgIC8vIHJldHVybiBFbnVtZXJhYmxlLlJhbmdlKDAsIGFycmF5LkdldExlbmd0aCgwKSkuU2VsZWN0KHJvdyA9PiBFbnVtZXJhYmxlLlJhbmdlKDAsIGFycmF5LkdldExlbmd0aCgxKSkuU2VsZWN0KGNvbCA9PiBhcnJheVtyb3csIGNvbF0pLlRvQXJyYXkoKSkuVG9BcnJheSgpOwogICAgfQoKICAgIHN0YXRpYyBpbnRbLF0gQ29udmVydFRvUmVjdGFuZ3VsYXIoaW50W11bXSBqYWdnZWRBcnJheSkKICAgIHsKICAgICAgICBpbnQgcm93cyA9IGphZ2dlZEFycmF5Lkxlbmd0aDsKICAgICAgICBpbnQgY29scyA9IGphZ2dlZEFycmF5WzBdLkxlbmd0aDsKCiAgICAgICAgaW50WyxdIHJlY3Rhbmd1bGFyQXJyYXkgPSBuZXcgaW50W3Jvd3MsIGNvbHNdOwoKICAgICAgICBmb3IgKGludCByb3cgPSAwOyByb3cgPCByb3dzOyByb3crKykKICAgICAgICB7CiAgICAgICAgICAgIGZvciAoaW50IGNvbCA9IDA7IGNvbCA8IGNvbHM7IGNvbCsrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZWN0YW5ndWxhckFycmF5W3JvdywgY29sXSA9IGphZ2dlZEFycmF5W3Jvd11bY29sXTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHJlY3Rhbmd1bGFyQXJyYXk7CiAgICB9CgogICAgc3RhdGljIHZvaWQgTWFpbihzdHJpbmdbXSBhcmdzKQogICAgewogICAgICAgIGludFssXSByZWN0YW5ndWxhckFycmF5ID0geyAKICAgICAgICAgICAgeyAzLCAwLCAyIH0sIAogICAgICAgICAgICB7IDMsIDAsIDEgfSwgCiAgICAgICAgICAgIHsgMiwgMSwgNSB9LCAKICAgICAgICAgICAgeyAzLCAxLCA2IH0sIAogICAgICAgICAgICB7IDQsIDIsIDggfQogICAgICAgIH07CgogICAgICAgIGludFtdW10gamFnZ2VkQXJyYXkgPSBDb252ZXJ0VG9KYWdnZWQocmVjdGFuZ3VsYXJBcnJheSk7CgogICAgICAgIEFycmF5LlNvcnQoamFnZ2VkQXJyYXksIG5ldyBBcnJheTJEQ29tcGFyZXIoKSk7CgogICAgICAgIGZvcmVhY2ggKHZhciBpdGVtIGluIGphZ2dlZEFycmF5KQogICAgICAgIHsKICAgICAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoc3RyaW5nLkpvaW4oIiAiLCBpdGVtKSk7CiAgICAgICAgfQoKICAgICAgICByZWN0YW5ndWxhckFycmF5ID0gQ29udmVydFRvUmVjdGFuZ3VsYXIoamFnZ2VkQXJyYXkpOwogICAgfQp9