ソート処理
今回はC#のWPFでPointの座標データをソートするプログラム製作にポンコツ2人組が挑戦してみました。
List
1つ目のコードでは、OrderByとThenByを使用してX座標を第1優先で昇順に、Y座標を第2優先で昇順にソートしています。
その後でOrderByDescendingおよびThenByDescendingを使用してX座標を第1優先で降順に、Y座標を第2優先で降順にソートしています。
2つ目のコードはY座標を第1優先にして、1つ目と同様に昇順・降順のソートをしています。
C#初心者が制作したものなのでいろいろとおかしい部分が多いと思います。プログラムを流用する際は適宜修正してください。
X座標を第1優先にした例
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WpfSample
{
/// <summary>
/// MainWindow.xaml の相互作用ロジック
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
List<Point> pointList = new List<Point>
{
new Point(3, 2),
new Point(1, 4),
new Point(2, 2),
new Point(3, 1),
new Point(1, 3)
};
// X座標を第1優先、Y座標を第2優先で昇順にソート
var sortedPoints = pointList.OrderBy(p => p.X).ThenBy(p => p.Y).ToList();
Console.WriteLine("昇順ソート:");
foreach (var point in sortedPoints)
{
Console.WriteLine($"X: {point.X}, Y: {point.Y}");
}
// 反対のソート (X座標を第1優先、Y座標を第2優先で降順にソート)
var reverseSortedPoints = sortedPoints.OrderByDescending(p => p.X).ThenByDescending(p => p.Y).ToList();
Console.WriteLine("\n反対のソート:");
foreach (var point in reverseSortedPoints)
{
Console.WriteLine($"X: {point.X}, Y: {point.Y}");
}
}
}
}
以下がこのプログラムの実行結果です。
昇順ソート:
X: 1, Y: 3
X: 1, Y: 4
X: 2, Y: 2
X: 3, Y: 1
X: 3, Y: 2
反対のソート:
X: 3, Y: 2
X: 3, Y: 1
X: 2, Y: 2
X: 1, Y: 4
X: 1, Y: 3
Y座標を第1優先にした例
このコードでは、まずY座標を第1優先、X座標を第2優先で昇順にソートした結果をascendingSortedPointsに格納し、
次にY座標を第1優先、X座標を第2優先で降順にソートした結果をdescendingSortedPointsに格納しています。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WpfSample
{
///
/// MainWindow.xaml の相互作用ロジック
///
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
List pointList = new List
{
new Point(3, 2),
new Point(1, 4),
new Point(2, 2),
new Point(3, 1),
new Point(1, 3)
};
// Y座標を第1優先、X座標を第2優先で昇順にソート
var ascendingSortedPoints = pointList.OrderBy(p => p.Y).ThenBy(p => p.X).ToList();
Console.WriteLine("昇順ソート:");
foreach (var point in ascendingSortedPoints)
{
Console.WriteLine($"X: {point.X}, Y: {point.Y}");
}
// Y座標を第1優先、X座標を第2優先で降順にソート
var descendingSortedPoints = pointList.OrderByDescending(p => p.Y).ThenByDescending(p => p.X).ToList();
Console.WriteLine("\n降順ソート:");
foreach (var point in descendingSortedPoints)
{
Console.WriteLine($"X: {point.X}, Y: {point.Y}");
}
}
}
}
以下がこのプログラムの実行結果です。
昇順ソート:
X: 3, Y: 1
X: 2, Y: 2
X: 3, Y: 2
X: 1, Y: 3
X: 1, Y: 4
降順ソート:
X: 1, Y: 4
X: 1, Y: 3
X: 3, Y: 2
X: 2, Y: 2
X: 3, Y: 1
配列のソート
このコードはPointではなく、オブジェクトを格納した配列のソート例です。
第1優先:x1の昇順、第2優先:y1の昇順のソートし、次に
第1優先:y1の降順、第2優先:x1の降順でソートします。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace WpfSample
{
/// <summary>
/// MainWindow.xaml の相互作用ロジック
/// </summary>
public partial class MainWindow : Window
{
public class Sample
{
public int X1 { get; set; }
public int Y1 { get; set; }
public int X2 { get; set; }
public int Y2 { get; set; }
public Sample(int x1, int y1, int x2, int y2)
{
X1 = x1;
Y1 = y1;
X2 = x2;
Y2 = y2;
}
}
public MainWindow()
{
InitializeComponent();
List<Sample> sampleList = new List<Sample>
{
new Sample(3, 2, 10, 12),
new Sample(1, 4, 13, 11),
new Sample(2, 2, 12, 10),
new Sample(3, 1, 11, 12),
new Sample(1, 3, 13, 12)
};
// ソート要件に従ってリストをソート
sampleList.Sort((s1, s2) =>
{
if (s1.X1 == s2.X1)
{
return s1.Y1.CompareTo(s2.Y1);
}
return s1.X1.CompareTo(s2.X1);
});
// ソートされたデータをコンソールに表示
foreach (var sample in sampleList)
{
Console.WriteLine($"X1: {sample.X1}, Y1: {sample.Y1}, X2: {sample.X2}, Y2: {sample.Y2}");
}
Console.WriteLine("");
List<Sample> sampleList2 = new List<Sample>
{
new Sample(3, 2, 10, 12),
new Sample(1, 4, 13, 11),
new Sample(2, 2, 12, 10),
new Sample(3, 1, 11, 12),
new Sample(1, 3, 13, 12)
};
// ソート要件に従ってリストをソート
sampleList2.Sort((s1, s2) =>
{
if (s1.Y1 == s2.Y1)
{
return s2.X1.CompareTo(s1.X1); // y1が同じ場合、x1を降順で比較
}
return s2.Y1.CompareTo(s1.Y1); // y1を降順で比較
});
// ソートされたデータをコンソールに表示
foreach (var sample in sampleList2)
{
Console.WriteLine($"X1: {sample.X1}, Y1: {sample.Y1}, X2: {sample.X2}, Y2: {sample.Y2}");
}
}
}
}
以下がこのプログラムの実行結果です。
X1: 1, Y1: 3, X2: 13, Y2: 12
X1: 1, Y1: 4, X2: 13, Y2: 11
X1: 2, Y1: 2, X2: 12, Y2: 10
X1: 3, Y1: 1, X2: 11, Y2: 12
X1: 3, Y1: 2, X2: 10, Y2: 12
X1: 1, Y1: 4, X2: 13, Y2: 11
X1: 1, Y1: 3, X2: 13, Y2: 12
X1: 3, Y1: 2, X2: 10, Y2: 12
X1: 2, Y1: 2, X2: 12, Y2: 10
X1: 3, Y1: 1, X2: 11, Y2: 12
C#(WPF)のサンプルプログラム
プログラムを学習するメリット
キャリアの選択肢が広がる
プログラムを学習することで、ソフトウェア開発者、データサイエンティスト、ウェブデザイナーなど、さまざまな職種に就くことができるキャリアの選択肢が広がります。
高い需要と給与
プログラムのスキルは現代社会において高い需要があります。IT企業やテクノロジー企業、さまざまな産業の企業など、多くの組織がプログラミングの専門家を求めています。
経済産業省が公開した2030年までのIT人材需給に関する調査結果を見るとIT人材が不足していることが分かります。
そのため、プログラミングのスキルを持つことで、高い給与や求人へのアクセスが期待できます。
経済産業省 IT人材需給に関する調査(概要)
自己表現と創造性の機会
プログラムを学習することで、自分のアイデアや概念を実現するための手段が身につきます。
プログラミングは、創造的な問題解決やアイデアの実現に使われるツールであり、自己表現や創造性を発揮するためのプラットフォームとして機能します。
自己成長と学習の機会
プログラミングは常に新しい技術やツールが登場しています。
学習は容易ではありませんが、新しいスキルを学ぶことで、自分の能力を向上させることができます。
市場価値の向上
プログラミングのスキルを身につけることで、自分の市場価値が向上します。プログラミングのスキルは、多くの企業が重視する能力の1つであり、市場価値の高いプロフェッショナルとして求められます。
そこで、自分が持つITスキルを転職サイトに登録しておくことで、それを見た企業からの紹介を受けられる可能性があります。
プロモーション
管理人情報
-
プログラミング経験20年のベテラン。もとはサービス業でブイブイ言わせていたが 何を思ってかIT業界に転職した。仕事はこなせるが人として色々抜けているポンコツ。
-
プログラミング経験ゼロの超初心者。コミュニケーション能力が非常に高く、 多くの人から愛される人気者。残念ながら三歩歩くと記憶を失う上級ポンコツスキルを持つ。