У меня есть коллекция следующимC# Linq Подмножество данных
public class Cluster
{
public List<ClusterData> Clust { get; set; }
}
public class ClusterData
{
public int id { get; set; }
public int E { get; set; }
public int N { get; set; }
public List<ClusterData> Data { get; set; }
}
Я пытаюсь найти данные, где подмножество Clust.Data
существуют в другом экземпляре Clust
, что-то вроде этого ...
var duplicate = !cluster.Clust.Except(cluster.Clust[p].Data).Any();
Однако дубликаты не найдены, хотя я подозреваю, что они должны быть? Является ли эта логика неудачной, потому что вложенный список в Clust
рассматривается при сравнении с другими Clust.Data
?
Простой пример ниже, я хотел бы обнаружить, что объект 1 имеет дубликат (объект 2 и объект 5) и в идеале удаляет их из коллекции.
Master collection
--- Associated collection
object 1
--- object 1
--- object 2
--- object 5
object 2
--- object 1
--- object 2
--- object 5
object 3
--- object 3
object 4
--- object 4
--- object 5
object 5
--- object 1
--- object 2
--- object 5
Ниже, как я ассоциирования коллекции друг с другом
for (int p = 0; p < cluster.Clust.Count; p++)
{
cluster.Clust[p].Data = new List<ClusterData>();
for (int l = 0; l < cluster.Clust.Count; l++)
{
//Logic logic logic
cluster.Clust[p].Data.Add(cluster.Clust[l]);
}
}
Вы подозреваете, что дубликаты должны быть найдены, или вы точно знаете, что существуют дубликаты? –
'ClusterData' не переопределяет' Equals' + 'GetHashCode' осмысленно. Поэтому используются 'Object.GetHashCode' и' Object.Equals', которые просто сравнивают ссылки. Если они создаются с помощью 'new', они не являются одинаковыми. –
Вы хотите вернуть дубликаты или просто bool, чтобы указать, есть ли они? –