Group the collection using a function which returns the key. : ICollection « Collections Data Structure « C# / C Sharp






Group the collection using a function which returns the key.

  

#region License
// Copyright 2006 James Newton-King
// http://www.newtonsoft.com
//
// This work is licensed under the Creative Commons Attribution 2.5 License
// http://creativecommons.org/licenses/by/2.5/
//
// You are free:
//    * to copy, distribute, display, and perform the work
//    * to make derivative works
//    * to make commercial use of the work
//
// Under the following conditions:
//    * You must attribute the work in the manner specified by the author or licensor:
//          - If you find this component useful a link to http://www.newtonsoft.com would be appreciated.
//    * For any reuse or distribution, you must make clear to others the license terms of this work.
//    * Any of these conditions can be waived if you get permission from the copyright holder.
#endregion

using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;

namespace MySpace.Common.IO.JSON.Utilities
{
    internal delegate T Func<A0, T>(A0 arg0);

    internal static class CollectionUtils
    {
        /// <summary>
        /// Group the collection using a function which returns the key.
        /// </summary>
        /// <param name="source">The source collection to group.</param>
        /// <param name="keySelector">The key selector.</param>
        /// <returns>A Dictionary with each key relating to a list of objects in a list grouped under it.</returns>
        public static Dictionary<K, List<V>> GroupBy<K, V>(ICollection<V> source, Func<V, K> keySelector)
        {
            if (keySelector == null)
                throw new ArgumentNullException("grouper");

            Dictionary<K, List<V>> groupedValues = new Dictionary<K, List<V>>();

            foreach (V value in source)
            {
                // using delegate to get the value's key
                K key = keySelector(value);
                List<V> groupedValueList;

                // add a list for grouped values if the key is not already in Dictionary
                if (!groupedValues.TryGetValue(key, out groupedValueList))
                {
                    groupedValueList = new List<V>();
                    groupedValues.Add(key, groupedValueList);
                }

                groupedValueList.Add(value);
            }

            return groupedValues;
        }
    }
}

   
    
  








Related examples in the same category

1.Finds a value of the given type in the given collection.
2.Adds a new element to the specified collection.
3.Adds all of the elements of the "c" collection to the "target" collection.
4.Removes all the elements from the collection.
5.Determines whether the collection contains the specified element.
6.Removes the specified element from the collection.
7.Retains the elements in the target collection that are contained in the specified collection
8.Returns an array containing all the elements of the collection.
9.Converts an ICollection instance to an ArrayList instance.
10.Tests if the specified object is a collection and converts it to its string representation.
11.Determines whether the collection contains the specified element
12.Adds the specified element to the specified collection
13.Determines whether the collection contains all the elements in the specified collection.
14.Removes all the elements from the target collection that are contained in the source collection.
15.Converts an System.Collections.ICollection instance to an System.Collections.ArrayList instance.
16.Copies the elements of the ICollection to a new array of the specified element type.
17.Determine whether a given collection only contains a single unique object
18.Is a Collection Null Or Empty Or Default
19.Converts the specified collection to its string representation.
20.Convert ICollection to T[]
21.Convert ICollection to T[]
22.ConvertAll ICollection to TOut[] with Converter
23.Add range to Collection
24.Lambda Collections Generic Set