【省エネ対応】C# プログラムの効率的な書き方
2012年1月19日紙版発売
川俣晶 著
A5判/440ページ
定価2,948円(本体2,680円+税10%)
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」の世界
- 昔からのメソッドでも
- 一般のソースコードでも
- 列挙に置き換えて遅くなる例
- 列挙に置き換えて結果が変わる例
- 最後のまとめ
- 練習問題
この本に関連する書籍
-
C#プログラマーのための デバッグの基本&応用テクニック
完璧なプログラムなどありません。思わぬ不具合が現れたりもします。プログラミングはバグとの戦いでもあります。ましてビジネスであれば可能な限りバグを潰すことが絶...
-
C#プログラマーのための 基礎からわかるLINQマジック!
現在では“技術に保守的な現場”においてさえ顧客事情が変わっています。.NETの環境でも核心的な技術=LINQがようやく使えるようになりました。LINQは,実際に使ってみる...
-
C# 6 実践的プログラミング[入門]講座
最新版C#6の解説書です。特に従来のC#で開発されてきたプログラムに焦点を当てます。ここで問題になるのは,開発済みのプログラム資産を無駄にしないこと。例として現実...
-
C#プログラミングの冒険 [実践編] ――ただ書けるだけじゃ物足りない!!
プログラミングの入門書は多く,確かにそれを読むことでプログラムを書くことはできるようになりますが,まだ十分ではありません。「書ける」の先にこそ多くの問題が待...
-
裏口からのC# 実践入門 ―バッドノウハウを踏み越えて本物へ!!
比較的使いやすいために,現在,開発現場においては主流のひとつと言って過言ではないC#でも,入門を果たした後でコーディングの力を磨くためには,多くの場合,自ら失...
-
C#ポケットリファレンス
13年のロングセラーシリーズ・ポケットリファレンスにWindowsプログラミングの定番言語となったC#が新登場。ベーシックだけど忘れてしまいがちな書式や振る舞いをコンパ...
-
[完全版]C# 実践ダイナミックプログラミング
C# 4.0で特徴的なことのひとつに「ダイナミックな(動的な)」プログラミングが可能ということが挙げられます。本書は,処理系のバージョンアップにより選択可能となっ...
-
[完全版]究極のC#プログラミング ――新スタイルによる実践的コーディング
C#は現在ではよく使われている言語であり処理系ですが,Cなどに比べると,まだ書籍の種類は多くありません。案外,言語としてのポイントを絞った,効率的な学習を意図...