gpt4 book ai didi

c# - 来自对象列表的不同值

转载 作者:行者123 更新时间:2023-12-02 22:00:33 24 4
gpt4 key购买 nike

我需要你的帮助。我正在尝试从对象列表中获取不同的值。我的类(class)看起来像这样:

class Chromosome
{
public bool[][] body { get; set; }
public double fitness { get; set; }
}

现在我有 List<Chromosome> population .现在我需要的是一种方法,如何获得新列表:List<Chromosome> newGeneration .这个新列表将仅包含来自原始列表的唯一染色体 - 种群。

染色体是唯一的,当他的整个 body (在本例中是二维 bool 数组) 相比之下是唯一的到其他染色体。我知道,有类似 MoreLINQ 的东西,但我不确定我是否应该使用 3rd 方代码,我知道我应该覆盖一些方法,但我有点迷茫。所以我真的很感激一些很好的一步一步的描述,即使是白痴也能完成 :)谢谢

最佳答案

首先,实现相等运算符(这进入 class Chromosome):

public class Chromosome : IEquatable<Chromosome>
{

public bool[][] body { get; set; }
public double fitness { get; set; }

bool IEquatable<Chromosome>.Equals(Chromosome other)
{
// Compare fitness
if(fitness != other.fitness) return false;

// Make sure we don't get IndexOutOfBounds on one of them
if(body.Length != other.body.Length) return false;

for(var x = 0; x < body.Length; x++)
{
// IndexOutOfBounds on inner arrays
if(body[x].Length != other.body[x].Length) return false;

for(var y = 0; y < body[x].Length; y++)
// Compare bodies
if(body[x][y] != other.body[x][y]) return false;
}

// No difference found
return true;
}

// ReSharper's suggestion for equality members

public override bool Equals(object obj)
{
if (ReferenceEquals(null, obj))
{
return false;
}
if (ReferenceEquals(this, obj))
{
return true;
}
if (obj.GetType() != this.GetType())
{
return false;
}
return this.Equals((Chromosome)obj);
}

public override int GetHashCode()
{
unchecked
{
return ((this.body != null ? this.body.GetHashCode() : 0) * 397) ^ this.fitness.GetHashCode();
}
}
}

然后,使用 Distinct :

var newGeneration = population.Distinct().ToList();

关于c# - 来自对象列表的不同值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17011350/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com