SortedSet.IsSubsetOf не работает должным образомC#

Место общения программистов C#
Ответить
Anonymous
 SortedSet.IsSubsetOf не работает должным образом

Сообщение Anonymous »

Я не верю, что SortedSet.IsSubsetOf работает должным образом. Учитывая этот код, разве ss.IsSubsetOf(l) не должен возвращать True?
Я подозреваю, что проблема в моей функции CompareTo, но я не вижу проблемы.
Я также добавил отдельный цикл, думая, что набор нужно найти отсортированным внутри другого IEnumerable . . . но это тоже не работает.
Может ли кто-нибудь объяснить, почему происходит такое поведение?
List l = new();
SortedSet ss = new();
HashSet h = new();

for (int i = 0; i < 100; i++)
{
var p = new Point(i, i);
l.Add(p);
l.Add(p);
h.Add(p);
h.Add(p);
ss.Add(p);
ss.Add(p);
}

// additional loop to get a sorted set.
for (int i = 0; i < 100; i++)
{
l.Add(new Point(i, i));
}

Console.WriteLine(l.Count); // 300
Console.WriteLine(h.Count); // 100
Console.WriteLine(ss.Count); // 100
Console.WriteLine(h.IsSubsetOf(l)); // True (as expected)
Console.WriteLine(h.IsProperSubsetOf(l)); // False

// This is the line in question
Console.WriteLine(ss.IsSubsetOf(l)); // False ?????????

Console.WriteLine(ss.IsProperSubsetOf(l)); // False

readonly struct Point : IComparable, IEquatable
{
public Point(double x, double y)
{
X = x;
Y = y;
}

public double X { get; }
public double Y { get; }

public int CompareTo(Point other)
{
if (X == other.X)
{
return Y.CompareTo(other.Y);
}
else
{
return X.CompareTo(other.X);
}
}

public bool Equals(Point other)
{
return X == other.X && Y == other.Y;
}

public override int GetHashCode()
{
return HashCode.Combine(X, Y);
}
}


Подробнее здесь: https://stackoverflow.com/questions/784 ... s-expected
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»