【省エネ対応】C# プログラムの効率的な書き方

書籍の概要

この本の概要

C#が提供するLINQ to Objectsは,多大な効能と価値を併せ持つ重要な考え方ですが,Cのポインタ同様に抽象的でわかりりにくいものです。実際の使い方が初期と現在とでは大幅に変化してきたこともあり,初期の段階でLINQ to Objectsを使用していたソースと現在のソースコードとでは大きく違っています。現在の書き方なら,①より無駄の少ない効率的な短いコード,②よりトリッキーなアクロバット的コードが得られます。なお,本書のサンプルソースには,SQLでは模倣ができない,独自のものが多くなっています。C#開発者必読!

こんな方におすすめ

  • 実際に開発を行っているC#プログラマー
  • C#を学習している初心者プログラマー,学生など

目次

  • はじめに

Part 1 LINQ to Objectsとは?

Chapter 1 LINQ to Objectsは主食!

  • LINQとは何か?
  • LINQ to Objectsとは何か?
  • LINQ to Objectsで何ができるのか?
  • LINQ to Objectsで何が良くなるのか?
  • LINQ to Objectsでできないこと
  • LINQ to Objectsは主食!

Chapter 2 forとforeachよ,LINQでさらば!

  • foreachが消える日
  • forが消える日
  • ファイル一覧のクエリ
  • 列挙に使わない列挙インターフェース
  • まとめ

Part 2 LINQ to Objectsの主要メソッド

Chapter 0 Part 2の読み方

  • Aggregateメソッド
  • Allメソッド
  • Anyメソッド
  • AsEnumerableメソッド
  • AsOrderedメソッド
  • AsParallelメソッド
  • AsSequentialメソッド
  • AsUnorderedメソッド
  • Averageメソッド
  • Castメソッド
  • Concatメソッド
  • Containsメソッド
  • Countメソッド
  • DefaultIfEmptyメソッド
  • Distinctメソッド
  • ElementAtメソッド
  • ElementAtOrDefaultメソッド
  • Emptyメソッド
  • Exceptメソッド
  • Firstメソッド
  • FirstOrDefaultメソッド
  • ForAllメソッド
  • GroupByメソッド
  • GroupJoinメソッド
  • Intersectメソッド
  • Joinメソッド
  • Lastメソッド
  • LastOrDefaultメソッド
  • LongCountメソッド
  • Maxメソッド
  • Minメソッド
  • OfTypeメソッド
  • OrderByメソッド
  • OrderByDescendingメソッド
  • Rangeメソッド
  • Repeatメソッド
  • Reverseメソッド
  • Select メソッド
  • SelectManyメソッド
  • SequenceEqualメソッド
  • Singleメソッド
  • SingleOrDefault メソッド
  • Skipメソッド
  • SkipWhileメソッド
  • Sumメソッド
  • Takeメソッド
  • TakeWhileメソッド
  • ThenByメソッド
  • ThenByDescendingメソッド
  • ToArrayメソッド
  • ToDictionaryメソッド
  • ToListメソッド
  • ToLookupメソッド
  • Unionメソッド
  • Whereメソッド
  • WithCancellationメソッド
  • WithDegreeOfParallelismメソッド
  • WithExecutionModeメソッド
  • WithMergeOptionsメソッド
  • Zipメソッド

Part 3 メソッドマニアックス

Chapter 0 Part 3の読み方

Chapter 1 Whereマニアックス

  • クエリ式よさらば
  • ループ中のif文の置き換え
  • Where 2連発
  • Where 2連発が意味を持つとき(その1)
  • Where 2連発が意味を持つとき(その2)
  • 順番の致命的問題
  • 速度が問題になる事例
  • Where Firstにならないとき
  • if文の代用に使えるか?
  • if-elseの代用に使えるか?
  • 動作を選べるか?
  • さらなるこだわり
  • Whereでswitch
  • 練習問題

Chapter 2 Selectマニアックス

  • Selectは型と値を加工する
  • Selectがいらないとき
  • Select 2連発の意味
  • Select 2連発を使うと良いとき
  • Selectでインデックス位置を知る
  • まったく無関係のデータ列を生成する
  • モードのあるデータに変換できるか?
  • SelectManyの効率を上げる
  • 列挙の列挙を得るためのクエリ
  • 練習問題

Chapter 3 ToArrayマニアックス

  • ToArray の効能
  • List クラスのToArray
  • 初期値を持った配列の作成
  • 1つだけ変えたい
  • シーケンスから配列生成
  • 配列 → シーケンス → 配列
  • 配列加工再代入
  • 配列の複製
  • 配列の型変換
  • charのシーケンスから配列へ
  • できれば使いたくないToArrayメソッド
  • 指定項目を削除する
  • 練習問題

Chapter 4 ToList マニアックス

  • List<T>で受け渡すとき
  • 配列から戻したい
  • 配列加工再代入再び
  • 削除の方法
  • ListにToListするとき
  • クエリ結果のList追加
  • 練習問題

Chapter 5 Countマニアックス

  • インスタンス化という意味
  • Countで良いとき
  • Countでダメなとき
  • CountメソッドとLengthプロパティで値が食い違うとき
  • 実体はなくてもCountできる
  • Countメソッドで足し算
  • Countメソッドで引き算
  • Countメソッドで掛け算
  • 練習問題

Chapter 6 FirstOrDefaultマニアックス

  • シーケンスを値に折りたため
  • 実はWhereは不要
  • 有無をチェックせよ
  • ソートしてFirst
  • First対Last
  • Lastでもよいとき
  • First対FirstOrDefault
  • First対Single
  • LastOrDefaultメソッドのほうが良いとき
  • 練習問題

Chapter 7 OrderByマニアックス

  • OrderByとは何か?
  • 普通のソートとどちらが速いか?
  • ソートを挟むと前後の処理順が変わる
  • メモリの破綻
  • OrderByは条件を絞ってから使え?
  • 入れ替えに意味があるとき
  • 逆順ソート
  • 条件ソート
  • 文字集計
  • 結局,OrderByメソッドは便利なのか?
  • 練習問題

Chapter 8 Min/Maxマニアックス

  • Min/Maxとは何か?
  • 文字列最長を求める
  • シーケンスが0個の場合の例外を回避する
  • 例外を回避する別の方法
  • null許容型の罠
  • 事前足切り
  • Min/Max入りクエリ式の問題
  • あえてMinで最大値を求める
  • Minで目的の値に最も近い値を選ぶ
  • Min/Maxを使わないで最小最大を求める
  • 練習問題

Chapter 9 All/Anyマニアックス

  • All/Anyメソッドとは何か?
  • 開始のトリガー
  • 空のシーケンスのAny/空のシーケンスのAll
  • 入力の検証
  • 有無の判定
  • 引数のないAllを自作してみる
  • AllでAny,AnyでAll
  • Allメソッドを使うべきではないとき
  • 練習問題

Chapter 10 Rangeマニアックス

  • 機関車を目指せ
  • Rangeメソッドとは何か?
  • Repeatメソッドとは何か?
  • 降順シーケンスの生成
  • 1ずつ増えないシーケンスの生成
  • 乱数をn個生成できるか?
  • 回数の決まっていないシーケンス生成
  • 単調ではないシーケンス
  • まだまだ続くよ
  • 無限に続くシーケンス
  • RangeでRepeat
  • RepeatでRange
  • Rangeをあえて先頭に立てない
  • Range相当のメソッドを書いてみよう
  • Repeat相当のメソッドを書いてみよう
  • 練習問題

Chapter 11 OfTypeマニアックス

  • OfTypeメソッドとは何か?
  • 継承とOfTypeの関係
  • インターフェースとOfType
  • 構造体とOfType
  • ArrayListにOfType
  • 例外を出すにはCast
  • OfTypeの罠.型を間違えると常に空
  • Castメソッドの罠
  • 練習問題

Chapter 12 Take/TakeWhile/Skipマニアックス

  • Takeメソッドとは何か?
  • TakeWhileメソッドとは何か?
  • Skipメソッドとは何か?
  • SkipWhileメソッドとは何か?
  • Pascalスタイル文字列
  • Cスタイルの文字列
  • 最新の10個がほしい
  • 今日の情報だけほしい
  • 今日の情報のうち最新の10個がほしい
  • 数に足りないとき
  • ヘッダの読み飛ばし
  • 静的なSkip,動的なSkip
  • シーケンス末尾のデータをSkipできるか?
  • 中間Skipはできるか?
  • 練習問題

Chapter 13 和,差,積集合マニアックス

  • 和差積集合
  • Concatメソッドとの違い
  • Distinctメソッドとの違い
  • あえて重複を許すマージ
  • 大文字小文字を判定しないUnion
  • BillはWilliamの別称
  • オブジェクトの一致判定
  • 和で積
  • 積で和
  • 違う型のデータを混ぜ合わせる
  • もっと違う型のデータを混ぜ合わせる
  • お帰り問題
  • 練習問題

Chapter 14 AsParallelマニアックス

  • AsParallelの最もシンプルな使い方
  • IEnumerable<T>対ParallelQuery<T>
  • Windowsフォームアプリケーションでの罠
  • WPFでの罠
  • 速度の問題
  • 結果の問題
  • 順番維持の問題
  • AsUnorderedの問題
  • コア数の制限
  • やむをえない無駄
  • もう探さなくていいよ
  • マージオプションの性能へのインパクト
  • 練習問題

Chapter 15 IEnumerableマニアックス

  • クエリ式とメソッド形式
  • 再利用の例
  • IEnumerable<T>と匿名型
  • yield returnは友達
  • 一筋縄では行かないyield.378
  • IEnumerable<T>対ParallelQuery<T>
  • IEnumerable<T>を生のまま使う
  • 練習問題

Chapter 16 Zipマニアックス

  • Zipメソッドとは何か?
  • 数が合いません
  • 分岐して戻る
  • 強制同期
  • JoinでZip
  • 練習問題

Chapter 17 Otherマニアックス

  • Aggregateメソッド
  • Containsメソッド
  • DefaultIfEmptyメソッド
  • ElementAtメソッド
  • ElementAtOrDefaultメソッド
  • Emptyメソッド
  • ForAllメソッド
  • GroupByメソッド
  • GroupJoinメソッド
  • LongCountメソッド
  • SequenceEqualメソッド
  • 練習問題

Chapter 18 すべてが列挙オブジェクトになる

  • 列挙オブジェクトは配列より速い
  • 例外的な状況
  • ファイル一覧をEnumせよ
  • 列挙に優しい「4」の世界
  • 昔からのメソッドでも
  • 一般のソースコードでも
  • 列挙に置き換えて遅くなる例
  • 列挙に置き換えて結果が変わる例
  • 最後のまとめ
  • 練習問題

著者プロフィール

川俣晶(かわまたあきら)

1964年4月生まれの東京出身。東京農工大化学工学科卒業。ENIXにてドラゴンクエスト2 MSX/MSX2版移植等のゲームソフト開発を行う。その後,マイクロソフトでMicrosoft Windows 2.1~3.0の日本語化に従事。現在はピーデー代表取締役。日本XMLユーザーグループ代表。過去に経験したプログラム言語はアセンブラ(8080A, Z-80, 6800, x86),BASIC,C言語,C++,Java,C#,JavaScript等。コンピュータの前を離れれば,下高井戸のアマチュア郷土史研究家となり,下高井戸周辺の暗渠や河川跡を探索する。

【主な著書】実践Web2.0論 Web2.0を第二のネットバブルにしないための警告の書/2006年/アスキー刊.実例で学ぶ! [入門と実践] Ajax+XML/2006年/技術評論社刊,パソコンにおける日本語処理・文字コードハンドブック/1999年/技術評論社刊,はじめてのWindowsプログラミング/1993年/ソフトバンククリエイティブ刊,C言語教科書 入門編/2009年/日経BP刊