gpt4 book ai didi

c# - 高效的对象平等 C#

转载 作者:太空狗 更新时间:2023-10-29 23:16:18 24 4
gpt4 key购买 nike

我正在尝试提高以下(示例)代码的性能。

Object[] inputKeys = new Object[10];
inputKeys[0] = "4021";
inputKeys[1] = "3011";
inputKeys[2] = "1010";
inputKeys[3] = "1020";
inputKeys[4] = "1030";

然后比较输入键。

for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
bool result = inputKeys[i].Equals(inputKeys[j]);
}
}

inputKeys 可以是stringint32DateTime 类型。

.Equals 行命中数百万次时,性能会大幅下降。

关于如何提高这条线的性能(相等性检查)有什么建议吗?

我试过这个:使用下面类的数组而不是对象数组来保存键。我在那里保留键类型和键值。

public class CustomKey : IEquatable<CustomKey>{
internal int KeyType { get; private set; }

internal string ValueString { get; private set; }
internal int ValueInteger { get; private set; }
internal DateTime ValueDateTime { get; private set; }

internal CustomKey(string keyValue)
{
this.KeyType = 0;
this.ValueString = (string)keyValue;
}

internal CustomKey(int keyValue)
{
this.KeyType = 1;
this.ValueInteger = (int)keyValue;
}

internal CustomKey(DateTime keyValue)
{
this.KeyType = 2;
this.ValueDateTime = (DateTime)keyValue;
}

public bool Equals(CustomKey other)
{
if (this.KeyType != other.KeyType)
{
return false;
}
else
{
if (this.KeyType == 0)
{
return this.ValueString.Equals(other.ValueString);
}
else if (this.KeyType == 1)
{
return this.ValueInteger.Equals(other.ValueInteger);
}
else if (this.KeyType == 2)
{
return this.ValueDateTime.Equals(other.ValueDateTime);
}
else
{
return false;
}
}
}
}

但性能更差。

最佳答案

您的比较循环效率低下。我建议你尝试使用:

Distinct<TSource>(this IEnumerable<TSource> source, IEqualityComparer<TSource> comparer)

为该类型定义您的 IEqualityComparer 并将其传递给该方法。您不会得到 bool 值,但会得到一个 IEnumerable,其中包含没有重复的列表。

关于c# - 高效的对象平等 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13938599/

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