C# 2次元配列の並び替え(ソート)

C#サンプル プログラムプログラミング
スポンサーリンク

C# サンプル プログラム一覧


2次元配列の並び替えを行うサンプルです。 LINQのorderby句を使用して、下記2次元配列の並び替えを行います。
並び替えを行うメソッド
メソッド 内容
OrderBy 昇順指定
OrderByDescending 降順指定
ThenBy 昇順指定(2列目以降はこちらを指定)
ThenByDescending 降順指定(2列目以降はこちらを指定)
昇順、降順、複数列の並び替えを行うサンプルを作成しました。 ①1列目で降順に並び替える ②1列目で降順に並び替える ③1列目、2列目を昇順、3列目を降順で並び替える
スポンサーリンク

プログラミング

言語:C#

using
using System;
using System.Linq;
①1列目で降順に並び替える
// 6行3列の2次元配列
int[,] iArray = new int[6, 3] {{ 2, 1, 1 },
                               { 1, 1, 1 },
                               { 2, 1, 3 },
                               { 3, 1, 1 },
                               { 2, 1, 2 },
                               { 2, 1, 1 }};

// 配列の行数
int numRows = iArray.GetLength(0);

// 配列の列数
int numCols = iArray.GetLength(1);

// 1列目を昇順に並び替える
var sortedRows = Enumerable.Range(0, numRows)
                           .OrderBy(row => iArray[row, 0])
                           .Select(row => Enumerable.Range(0, numCols)
                           .Select(col => iArray[row, col])
                           .ToArray())
                           .ToArray();

// 結果出力
foreach (var row in sortedRows)
{
    // 各行の要素をスペースで区切って出力
    Console.WriteLine(string.Join(" ", row));
}

実行結果

②1列目で降順に並び替える
// 6行3列の2次元配列
int[,] iArray = new int[6, 3] {{ 2, 1, 1 },
                               { 1, 1, 1 },
                               { 2, 1, 3 },
                               { 3, 1, 1 },
                               { 2, 1, 2 },
                               { 2, 1, 1 }};

// 配列の行数
int numRows = iArray.GetLength(0);

// 配列の列数
int numCols = iArray.GetLength(1);

// 1列目で降順に並び替える
var sortedRows = Enumerable.Range(0, numRows)
                           .OrderByDescending(row => iArray[row, 0])
                           .Select(row => Enumerable.Range(0, numCols)
                           .Select(col => iArray[row, col])
                           .ToArray())
                           .ToArray();

// 結果出力
foreach (var row in sortedRows)
{
    // 各行の要素をスペースで区切って出力
    Console.WriteLine(string.Join(" ", row));
}

実行結果

③1列目、2列目を昇順、3列目を降順で並び替える
// 6行3列の2次元配列
int[,] iArray = new int[6, 3] {{ 2, 1, 1 },
                               { 1, 1, 1 },
                               { 2, 1, 3 },
                               { 3, 1, 1 },
                               { 2, 1, 2 },
                               { 2, 1, 1 }};

// 配列の行数
int numRows = iArray.GetLength(0);

// 配列の列数
int numCols = iArray.GetLength(1);

// 並び替える、
var sortedRows = Enumerable.Range(0, numRows)
                           .OrderBy(row => iArray[row, 0])              // 1列目を昇順に並び替える
                           .ThenBy(row => iArray[row, 1])               // 2列目を昇順に並び替える
                           .ThenByDescending(row => iArray[row, 2])     // 3列目を降順に並び替える
                           .Select(row => Enumerable.Range(0, numCols)
                           .Select(col => iArray[row, col])
                           .ToArray())
                           .ToArray();

// 結果出力
foreach (var row in sortedRows)
{
    // 各行の要素をスペースで区切って出力
    Console.WriteLine(string.Join(" ", row));
}

実行結果

以上です。
スポンサーリンク
タイトルとURLをコピーしました