문제

이 질문은 이미 여기에 답이 있습니다.

나는 그런 수업이 있습니다 :

public class Cycle
{
          public List<int> Edges
        {
            get;
            private set;
        }

        public override bool Equals(object obj)
        {
            Cycle cycle = (Cycle)obj;

            var list1 = cycle.Edges;
            var list2 = Edges;
            var same = list1.Except(list2).Count() == 0 &&
                       list2.Except(list1).Count() == 0;
            return same;

        }

        public override int GetHashCode()
        {
         //   return Edges.GetHashCode();
        }
} 

당신이 볼 수 있듯이, 두 사람이라면 Edge 목록은 동일합니다 Cycles 동일합니다.

이제 문제는 구현 방법입니다 GetHashCode()?

나는 시도했다 Edges.GetHashCode(), 그러나 문제는 두 가지입니다 List<Cycle>, 동일하게 Cycle 대상이지만 다른 순서는 동일해야하더라도 다른 것으로 간주됩니다.

도움이 되었습니까?

해결책

당신은 다음과 같은 일을 할 수 있습니다.

override int GetHashCode()
{
  return Edges.Distinct().Aggregate(0, (x,y) =>x.GetHashCode() ^ y.GetHashCode());
}

간단하지만 일관성이 있어야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top