/* * QUANTCONNECT.COM - Democratizing Finance, Empowering Individuals. * Lean Algorithmic Trading Engine v2.0. Copyright 2014 QuantConnect Corporation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ using System.Collections.Generic; using System.Linq; namespace QuantConnect.Util { /// /// An implementation of for . /// Useful when using a as the key of a collection. /// /// The list type public class ListComparer : IEqualityComparer> { /// Determines whether the specified objects are equal. /// true if the specified objects are equal; otherwise, false. public bool Equals(IReadOnlyCollection x, IReadOnlyCollection y) { return x.SequenceEqual(y); } /// Returns a hash code for the specified object. /// A hash code for the specified object created from combining the hash /// code of all the elements in the collection. public int GetHashCode(IReadOnlyCollection obj) { var hashCode = 0; foreach (var dateTime in obj) { hashCode = (hashCode * 397) ^ dateTime.GetHashCode(); } return hashCode; } } }