Tango
  • Introduction
  • Getting Started
    • Summary
    • From me, the Developer
    • What is Tango?
    • Where to start?
  • Installation
    • Based on NuGet
    • Manually
  • Fundamentals
    • Introduction
    • Using Pattern Matching
    • Option values
    • Either values
    • From void to Unit
    • Func and Action
    • Chainable operations in a Continuation flow
    • Currying and Partial Application
  • Functional
    • Introduction
    • Currying
    • Partial Application
    • Functional Extensions
    • QuickCast to Delegates
  • Operations
    • Introduction
    • Operations with Booleans
    • Operations with Integers
    • Operations with Decimals
    • Operations with Doubles
    • Operations with Strings
  • Types
    • Introduction
    • Unit
    • Option<T>
    • Either<TLeft, TRight>
    • Continuation<TFail, TSuccess>
  • Modules
    • Introduction
    • Option
      • Apply
      • AsEnumerable
      • Bind
      • Count
      • Exists
      • Filter
      • Fold
      • FoldBack
      • Iterate
      • Map
      • OfNullable
      • ToArray
      • ToList
      • ToNullable
    • Either
      • Exists
      • Iterate
      • Fold
      • FoldBack
      • Map
      • Swap
      • ToTuple
    • Continuation
      • AsContinuation
      • Resolve
      • Reject
      • All
    • Collection
      • Append
      • Choose
      • ChunkBySize
      • Collect
      • CompareWith
      • CountBy
      • Concat
      • Distinct
      • Empty
      • Exists
      • Exists2
      • Filter
      • FindIndex
      • Fold
      • Fold2
      • FoldBack
      • FoldBack2
      • ForAll
      • ForAll2
      • ForAll3
      • Head
      • HeadAndTailEnd
      • Range
      • Generate
      • Initialize
      • Iterate
      • Iterate2
      • IterateIndexed
      • IterateIndexed2
      • Map
      • Map2
      • Map3
      • MapIndexed
      • MapIndexed2
      • MapIndexed3
      • Partition
      • Permute
      • Pick
      • Reduce
      • ReduceBack
      • Replicate
      • Scan
      • Scan2
      • ScanBack
      • ScanBack2
      • Tail
      • TryFind
      • TryPick
      • Unzip
      • Unzip3
      • Zip
      • Zip3
  • Extensions
    • Introduction
    • Enum Extensions
    • EqualityComparer Builder
    • Modules as Extensions
Powered by GitBook
On this page

Was this helpful?

  1. Modules
  2. Collection

Distinct

PreviousConcatNextEmpty

Last updated 5 years ago

Was this helpful?

Returns a collection that contains no duplicate entries according to comparer and hashCodeGetter functions.

If an element occurs multiple times in the collection then the later occurrences are discarded.

Internally this method uses a object.

Parameter

Returns

Func<T, T, bool> comparer

Func<T, int> hashCodeGetter

IEnumerable<T> source

int

Usage

Discarding duplicate entries

class Product {
    int Id {get; set;}
    string Name {get; set;}
    double Price {get; set;}
}

// products:
// |    Id    |    Name    |    Price    |
// |    1     |  Notebook  |     800     |
// |    2     |    Mouse   |      20     |
// |    3     |   Wallet   |      40     |
// |    4     |    Book    |      10     |
// |    5     | Smartphone |     400     |
// |    1     |  Notebook  |     800     |
// |    1     |  Notebook  |     800     |
// |    4     |    Book    |      10     |

IEnumerable<Product> result = products.Distinct(
    (product1, product2) => product1.Id == product2 == Id,
     product => product.Id.GetHashCode()
    );

// result:
// |    Id    |    Name    |    Price    |
// |    1     |  Notebook  |     800     |
// |    2     |    Mouse   |      20     |
// |    3     |   Wallet   |      40     |
// |    4     |    Book    |      10     |
// |    5     | Smartphone |     400     |
EqualityComparerBuilder<T>