業務系システム開発勉強会「WPF 入門 #4」に参加しました

Nia-TN-SDF-A2

こんにちはー!ニアです。

私は先週の日曜日に「業務系システム開発勉強会「WPF 入門 #4」」に参加しました。

1. 前回から作っていたアプリがほぼできました

私は前回の勉強会から作っていた日報メーカーアプリ開発の続きをし、勉強会終盤あたりにほぼ完成することができました。( ⇒ GitHub

※画像に入力されている情報は架空のものです。

まずこちらは、情報アシスタントの情報を入力する画面です。日付や担当教室、勤務時間などを入力します。

drmita01

こちらは、業務時間とその内容を入力する画面です。日報では大学の時間割ごとに業務内容を入力する必要があるので、アプリではリストボックスを使って時間割ごとに入力項目を追加するスタイルにしました。リストボックスのItemsSourceにはObservableCollectionクラスとデータバインディングをし、リストボックスの項目内はItemTemplateを使ってレイアウトを構成しています。

drmita02

こちらは、利用者からの質問とその解決方法を入力する画面です。追加ボタンを押して追加された項目の質問時刻欄には、DateTime.Nowプロパティでその時の時刻を自動的に入力されるので、質問が来た時にサポートチケットを発行するような感覚で、項目を追加することができます。

drmita03

必要事項を入力したら、日報データを生成するボタンを押すだけで、日報データのタイトルと本文を簡単に作成できます。項目の数え上げやインデックス番号の付加、インデントの調整は全てアプリが自動的に行うので、ユーザーは日報の内容を入力するだけでOK。質問件数などの数え間違いや必要項目の入力し忘れを未然に防ぎます。

drmita04

2. 今回のお題はLINQ

今回のお題はLINQということで、勉強会の最後にちょっとLTをして、そのアプリで使用しているLINQについて話しました。

2.1. OrderByメソッドとThenByメソッド

3つのLINQの内、LTでは省略していた「OrderByメソッドとThenByメソッド」について補足します。

OrderByメソッドは、指定したキーに従ってコレクションの各要素を並び替えたシーケンス(IOrderedEnumerable<T>型)を返します。

ThenByメソッドは、IOrderedEnumerable<T>型のシーケンスに対して使用し、OrderByメソッドで指定したキーの要素が等しい要素同士では、指定した別のキーに従ってさらに並び替えたシーケンスを返します。

以下はOrderByメソッドとThenByメソッドのサンプルプログラムです。

28行目では、果物(Fruit型)のリストに対して、OrderByメソッドで値段(Price)の安い順にソートし、ThenByメソッドで値段が等しい要素同士では名前(Name)の昇順にソートしています。

using System;
using System.Collections.Generic;
using System.Linq;

// 果物の名前と値段
public struct Fruit {
    public string Name;
    public int Price;
}

public class Program {
    public static void Main() {
        
        List<Fruit> fruits = new List<Fruit>();
        fruits.Add( new Fruit{ Name = "Apple", Price = 120 } );
        fruits.Add( new Fruit{ Name = "Orange", Price = 60 } );
        fruits.Add( new Fruit{ Name = "Lime", Price = 60 } );
        fruits.Add( new Fruit{ Name = "Banana", Price = 120 } );
        fruits.Add( new Fruit{ Name = "Lemon", Price = 60 } );
        // ソート前の各要素を出力します。
        Console.WriteLine( "◆ ソート前" );
        Print( fruits );
        
        var res1 = fruits.OrderBy( _ => _.Price );
        Console.WriteLine( "◆ 値段の安い順にソート" );
        Print( res1 );
        
        var res2 = fruits.OrderBy( _ => _.Price ).ThenBy( _ => _.Name );
        Console.WriteLine( "◆ 値段の安い順にソート(同じ値段でならば、名前順にソート)" );
        Print( res2 );
        
    }
    
    // リストの各要素を出力します。
    private static void Print( IEnumerable<Fruit> source ){
        foreach( var item in source ){
            Console.WriteLine( "{0} : {1} JPY", item.Name, item.Price );
        }
        Console.WriteLine( "---" );
    }
}

上のコードの実行結果がこちらです。

 ◆ ソート前
Apple : 120 JPY
Orange : 60 JPY
Lime : 60 JPY
Banana : 120 JPY
Lemon : 60 JPY
◆ 値段の安い順にソート
Orange : 60 JPY
Lime : 60 JPY
Lemon : 60 JPY
Apple : 120 JPY
Banana : 120 JPY
◆ 値段の安い順にソート(同じ値段でならば、名前順にソート)
Lemon : 60 JPY
Lime : 60 JPY
Orange : 60 JPY
Apple : 120 JPY
Banana : 120 JPY

なお、ThenByメソッドの戻り値はIOrderedEnumerable<T>型なので、そこからThenByメソッドを実行してさらに並び替えをすることができます。

もちろん、ThenByメソッドにも降順ソート版のThenByDecendingメソッドもあります。OrderByDecendingメソッドと一緒に使用することで、例えば試合でのランキング集計に応用できます。

3. 今回の懇親会は台湾料理!

今回も懇親会に参加し、台湾料理を頂きました。

私はハチノスの珍味が一番おいしかったです(かなり辛かったですが(笑))。そう言えば、地元の中華料理店にもハチノスを使った料理があった気が・・・、今度食べてみよう。

4. おわりに

今回も楽しくC#+XAMLの勉強をすることができました。主催者の皆様、会場を用意してくださった皆様ありがとうございました。

それでは、See you next!

コメント

タイトルとURLをコピーしました