【省エネ対応】C# プログラムの効率的な書き方
- 川俣晶 著
- 定価
- 2,948円(本体2,680円+税10%)
- 発売日
- 2012.1.19
- 判型
- A5
- 頁数
- 440ページ
- ISBN
- 978-4-7741-4975-2
概要
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刊