![](/img/trans.png)
[英]Sort an array based on an index array in Java (similar to C#'s Array.Sort())
[英]C# Lambda expression with IComparer and Array.Sort (converting from Java to C#)
我正在嘗試將使用Comparator
接口的lambda表達式從Java轉換為C#。 我收到以下錯誤:
無法將lambda表達式轉換為類型'
System.Collections.IComparer
',因為它不是委托類型。
我試圖切換到Comparison<T>
,但是它不適用於Array.Sort
方法:
Array.Sort(Population, Population[0].Comparator);
Array.Sort(population, 0, population.Length, population[0].Comparator);
PregancyIndividual實現IGeneticIndividual接口。
public virtual IGeneticIndividual[] selectPopulation(IGeneticIndividual[] population)
{
IGeneticIndividual[] res = new IGeneticIndividual[population.Length];
Array.Sort(population, 0, population.Length, population[0].Comparator);
這是我的Java代碼:
@Override
public Comparator getComparator() {
Comparator<PregnancyIndividual> IndividualFitnessComparator
= (PregnancyIndividual ind1, PregnancyIndividual ind2) -> {
int res = 1;
double fitness1 = ind1.getFitnessCalculator().calculateFitness(ind1);
double fitness2 = ind2.getFitnessCalculator().calculateFitness(ind2);
if (fitness1 > fitness2) {
return -1;
}
if (fitness1 == fitness2) {
return 0;
}
return res;
};
return IndividualFitnessComparator;
}
PregnancyIndividual
實現我自己的界面:
public class PregnancyIndividual implements IGeneticIndividual
我現在正在嘗試為C#實現我的代碼:
public virtual IComparer Comparator
{
get
{
//<PregnancyIndividual>
IComparer IndividualFitnessComparator = (PregnancyIndividual ind1, PregnancyIndividual ind2) =>
{
int res = 1;
double fitness1 = ind1.FitnessCalculator.calculateFitness(ind1);
double fitness2 = ind2.FitnessCalculator.calculateFitness(ind2);
if (fitness1 > fitness2)
{
return -1;
}
if (fitness1 == fitness2)
{
return 0;
}
return res;
};
return IndividualFitnessComparator;
}
}
更改您的PregnancyIndividual類以實現Icomparer並實現以下比較:
class PregnancyIndividual : IComparer
{
int IComparer.Compare(object a, object b)
{
PregnancyIndividual ind1 = (PregnancyIndividual)a;
PregnancyIndividual ind2 = (PregnancyIndividual)b;
int res = 1;
double fitness1 = ind1.FitnessCalculator.calculateFitness(ind1);
double fitness2 = ind2.FitnessCalculator.calculateFitness(ind2);
if (fitness1 > fitness2)
{
return -1;
}
if (fitness1 == fitness2)
{
return 0;
}
return res;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.