c#结构数组排序
本文关键字:数组排序 结构 | 更新日期: 2023-09-27 18:01:37
我正在运行一个模拟部分,其中需要一组值对数组。当我使用Array.Sort(v1,v2)时,它基于first对2个数组进行排序,所有模拟大约需要9毫秒。但我需要先排序然后再排序所以我创建了structs数组。请看下面的代码
private struct ValueWithWeight : IComparable<ValueWithWeight>
{
public double Value;
public double Weight;
public int CompareTo(ValueWithWeight other)
{
int cmp = this.Value.CompareTo(other.Value);
if (cmp != 0)
return cmp;
else
return this.Weight.CompareTo(other.Weight);
}
}
void Usage()
{
ValueWithWeight[] data = FillData();
Array.Sort(data);
}
现在大约需要27ms。有更好的排序方法吗?
既然你要极大地优化它,请考虑如下:
-
数组。Sort在数组上运行并执行比较。在你的例子中,因为你在结构上实现了一个接口,所以不会有拆箱。
-
数组。Sort在排序时执行元素交换。交换是一种内部记忆。你的结构至少需要16个字节。您可以尝试通过在类中分配双精度值来减少影响。类总是占用IntPtr。大小字节(因为你将存储指针),所以它应该复制更少的字节。