售 价:¥
温馨提示:数字商品不支持退换货,不提供源文件,不支持导出打印
为你推荐
.NET 4.0 Generics
Table of Contents
.NET 4.0 Generics
Credits
Foreword
About the Author
Acknowledgement
About the Reviewers
www.PacktPub.com
Support files, eBooks, discount offers and more
Why Subscribe?
Free Access for Packt account holders
Preface
What this book covers
What you need for this book
Who this book is for
Conventions
Time for action – heading
What just happened?
Pop quiz – heading
Have a go hero – heading
Reader feedback
Customer support
Downloading the example code
Errata
Piracy
Questions
1. Why Generics?
An analogy
Reason 1: Generics can save you a lot of typing
Reason 2: Generics can save you type safety woes, big time
What's the problem with this approach?
Reason 3: Generics leads to faster code
Reason 4: Generics is now ubiquitous in the .NET ecosystem
Setting up the environment
Summary
2. Lists
Why bother learning about generic lists?
Types of generic lists
Checking whether a sequence is a palindrome or not
Time for action – creating the generic stack as the buffer
What just happened?
Time for action – completing the rest of the method
What just happened?
Designing a generic anagram finder
Time for action – creating the method
What just happened?
Have a go hero – use this method to find anagrams from a dictionary
Life is full of priorities, let's bring some order there
Time for action – creating the data structure for the prioritized shopping list
What just happened?
Time for action – let's add some gadgets to the list and see them
What just happened?
Time for action – let's strike off the gadgets with top-most priority after we have bought them
What just happened?
Time for action – let's create an appointment list
What just happened?
Live sorting and statistics for online bidding
Time for action – let's create a custom class for live sorting
What just happened?
Why did we have three LinkedList<T> as part of the data structure?
Pop quiz
An attempt to answer questions asked by your boss
Time for action – associating products with live sorted bid amounts
What just happened?
Time for action – finding common values across different bidding amount lists
What just happened?
Have a go hero – finding common demographic statistics for the bidders
You will win every scrabble game from now on
Time for action – creating the method to find the character histogram of a word
Time for action – checking whether a word can be formed
Time for action – let's see whether it works
Pop quiz
Have a go hero – explain the code!
Trying to fix an appointment with a doctor?
Time for action – creating a set of dates of the doctors' availability
What just happened?
Time for action – finding out when both doctors shall be present
What just happened?
Pop quiz
Revisiting the anagram problem
Time for action – re-creating the anagram finder
What just happened?
Lists under the hood
Summary
3. Dictionaries
Types of generic associative structures
Creating a tag cloud generator using dictionary
Time for action – creating the word histogram
What just happened?
Have a go hero
Pop quiz
Creating a bubble wrap popper game
Time for action – creating the game console
What just happened?
Look how easy it was!
How did we decide we need a dictionary and not a list?
Let's build a generic autocomplete service
Time for action – creating a custom dictionary for autocomplete
What just happened?
Time for action – creating a class for autocomplete
What just happened?
The most common pitfall. Don't fall there!
Let's play some piano
Time for action – creating the keys of the piano
What just happened?
How are we recording the key strokes?
Time for action – switching on recording and playing recorded keystrokes
How it works?
C# Dictionaries can help detect cancer. Let's see how!
Time for action – creating the KNN API
What just happened?
Time for action – getting the patient records
Time for action – creating the helper class to read a delimited file
What just happened?
Time for action – let's see how to use the predictor
What just happened?
Tuples are great for many occasions including games
Time for action – putting it all together
What just happened?
Why have we used Tuples?
How did we figure out whether the game is over or not?
Have a go hero
Summary
4. LINQ to Objects
What makes LINQ?
Extension methods
Time for action – creating an Extension method
What just happened?
Time for action – consuming our new Extension method
What just happened?
Check out these guidelines for when not to use Extension methods
Object initializers
Collection initializers
Implicitly typed local variables
Anonymous types
Lambda expressions
Functors
Predicates
Actions
Putting it all together, LINQ Standard Query Operators
Time for action – getting the LINQPad
Restriction operators
Where()
Time for action – finding all names with *am*
What just happened?
Time for action – finding all vowels
What just happened?
Time for action – finding all running processes matching a Regex
What just happened?
Time for action – playing with the indexed version of Where()
What just happened?
Time for action – learn how to go about creating a Where() clause
What just happened?
Pop quiz – doing the thing
Projection operators
Select()
Time for action – let's say "Hello" to your buddies
What just happened?
Making use of the overloaded indexed version of Select()
Time for action – radio "Lucky Caller" announcement
What just happened?
Have a go hero – can you tell me what's going on here?
SelectMany()
Time for action – flattening a dictionary
What just happened?
Partitioning operators
Take()
Time for action – leaving the first few elements
What just happened?
TakeWhile()
Time for action – picking conditionally
What just happened?
Skip()
Time for action – skipping save looping
What just happened?
SkipWhile()
Ordering operators
Reverse()
Time for action – reversing word-by-word
What just happened?
Time for action – checking whether a given string is a palindrome or not
What just happened?
OrderBy()
Sorting an array of strings alphabetically
Time for action – sorting names alphabetically
What just happened?
Time for action – sorting 2D points by their co-ordinates
What just happened?
Have a go hero – sorting Student objects
OrderByDescending()
ThenBy()
Time for action – sorting a list of fruits
What's the difference between a sequence of OrderBy().OrderBy() and OrderBy().ThenBy()?
ThenByDescending()
Grouping operator
GroupBy()
Time for action – indexing an array of strings
What just happened?
Time for action – grouping by length
What just happened?
Set operators
Intersect()
Time for action – finding common names from two names' lists
What just happened?
Union()
Time for action – finding all names from the list, removing duplicates
What just happened?
Concat()
Time for action – pulling it all together including duplicates
Except()
Time for action – finding all names that appear mutually exclusively
What just happened?
Distinct()
Time for action – removing duplicate song IDs from the list
Conversion operators
ToArray()
Time for action – making sure it works!
What just happened?
ToList()
Time for action – making a list out of IEnumerable<T>
What just happened?
ToDictionary()
Time for action – tagging names
What just happened?
ToLookup()
Time for action – one-to-many mapping
What just happened?
Element operators
First()
Time for action – finding the first element that satisfies a condition
What just happened?
How First() is different from Single()?
FirstOrDefault()
Time for action – getting acquainted with FirstOrDefault()
What just happened?
Last()
LastOrDefault()
SequenceEquals()
Time for action – checking whether a sequence is palindromic
What just happened?
ElementAt()
Time for action – understanding ElementAt()
What just happened?
ElementAtOrDefault()
DefaultIfEmpty()
Time for action – check out DefaultIfEmpty()
What just happened?
Generation operators
Range()
Time for action – generating arithmetic progression ranges
What just happened?
Time for action – running a filter on a range
What just happened?
Repeat()
Time for action – let's go round and round with Repeat()
What just happened?
Quantifier operators
Single()
Time for action – checking whether there is only one item matching this pattern
What just happened?
Pop quiz – doing the thing
SingleOrDefault()
Time for action – set to default if there is more than one matching elements
Any()
Time for action – checking Any()
What just happened?
All()
Time for action – how to check whether all items match a condition
Merging operators
Zip()
What just happened?
Summary
5. Observable Collections
Active change/Statistical change
Passive change/Non-statistical change
Data sensitive change
Time for action – creating a simple math question monitor
What just happened?
Time for action – creating the collections to hold questions
What just happened?
Time for action – attaching the event to monitor the collections
What just happened?
Time for action – dealing with the change as it happens
What just happened?
Time for action – dealing with the change as it happens
What just happened?
Time for action – putting it all together
What just happened?
Time for action – creating a Twitter browser
Time for action – creating the interface
Time for action – creating the TweetViewer user control design
Time for action – gluing the TweetViewer control
Time for action – putting everything together
What just happened?
Time for action – dealing with the change in the list of names in the first tab
What just happened?
Time for action – a few things to beware of at the form load
What just happened?
Time for action – things to do when names get added or deleted
What just happened?
Time for action – sharing the load and creating a task for each BackgroundWorker
What just happened?
Time for action – a sample run of the application
Have a go hero – archive tweets
Have a go hero – monitoring weather/stock
Summary
6. Concurrent Collections
Creating and running asynchronous tasks
Pattern 1: Creating and starting a new asynchronous task
Pattern 2: Creating a task and starting it off a little later
Pattern 3: Waiting for all running tasks to complete
Pattern 4: Waiting for any particular task
Pattern 5: Starting a task with an initial parameter
Simulating a survey (which is, of course, simultaneous by nature)
Time for action – creating the blocks
What just happened?
Devising a data structure for finding the most in-demand item
Time for action – creating the concurrent move-to-front list
What just happened?
Have a go hero – creating a virtual monitoring system
Time for action – simulating a bank queue with multiple tellers
What just happened?
Time for action – making our bank queue simulator more useful
What just happened?
Be a smart consumer, don't wait till you have it all
Exploring data structure mapping
Summary
7. Power Collections
Setting up the environment
BinarySearch()
Time for action – finding a name from a list of names
What just happened?
CartesianProduct()
Time for action – generating names of all the 52 playing cards
What just happened?
RandomShuffle()
Time for action – randomly shuffling the deck
What just happened?
NCopiesOf()
Time for action – creating random numbers of any given length
What just happened?
Time for action – creating a custom random number generator
What just happened?
ForEach()
Time for action – creating a few random numbers of given any length
What just happened?
Rotate() and RotateInPlace()
Time for action – rotating a word
What just happened?
Time for action – creating a word guessing game
What just happened?
Have a go hero
RandomSubset()
Time for action – picking a set of random elements
What just happened?
Reverse()
Time for action – reversing any collection
What just happened?
EqualCollections()
Time for action – revisiting the palindrome problem
What just happened?
DisjointSets()
Time for action – checking for common stuff
What just happened?
Time for action – finding anagrams the easiest way
What just happened?
Have a go hero
Creating an efficient arbitrary floating point representation
Time for action – creating a huge number API
What just happened?
Have a go hero
Creating an API for customizable default values
Time for action – creating a default value API
What just happened?
Mapping data structure
Algorithm conversion strategy
Summary
8. C5 Collections
Setting up the environment
Time for action – cloning Gender Genie!
What just happened?
Time for action – revisiting the anagram problem
What just happened?
Time for action – Google Sets idea prototype
What just happened?
Time for action – finding the most sought-after item
What just happened?
Sorting algorithms
Pattern 1: Sorting an array of integers
Pattern 2: Partially sorting an array—say, sort first five numbers of a long array
Pattern 3: Sorting a list of string objects
Summary
9. Patterns, Practices, and Performance
Generic container patterns
How these are organized
Pattern 1: One-to-one mapping
Pattern interface
Some concrete implementations
Example usages
Some situations where this pattern can be used
Pattern 2: One-to-many unique value mapping
Pattern interface
Some concrete implementations
Example usages
Some situations where this pattern can be used
Pattern 3: One-to-many value mapping
Pattern interface
Some concrete implementations
Example usages
Some situations where this pattern can be used
Pattern 4: Many-to-many mapping
Pattern interface
Some concrete implementations
Example usages
Some situations where this pattern can be used
A special Tuple<> pattern
Time for action – refactoring deeply nested if-else blocks
What just happened?
Best practices when using Generics
Selecting a generic collection
Best practices when creating custom generic collections
Performance analysis
Lists
Dictionaries/associative containers
Sets
How would we do this investigation?
Benchmarking experiment 1
Benchmarking experiment 2
Benchmarking experiment 3
Benchmarking experiment 4
Benchmarking experiment 5
Benchmarking experiment 6
Benchmarking experiment 7
Benchmarking experiment 8
Benchmarking experiment 9
Summary
A. Performance Cheat Sheet
Parameters to consider
B. Migration Cheat Sheet
C. Pop Quiz Answers
Chapter 2
Lists
Chapter 3
Dictionaries
Chapter 4
LINQ to Objects
Index
买过这本书的人还买过
读了这本书的人还在读
同类图书排行榜