[英]C# sort array of structs
我正在運行一個仿真部分,該部分需要某種類型的值對數組。 當我使用Array.Sort(v1,v2)時,它首先根據2個數組進行排序,所有模擬過程大約需要9毫秒。 但是我需要先排序然后再排序,所以我創建了結構數組。 請參閱下面的代碼。
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);
}
現在大約需要27毫秒。 有沒有更好的排序方法?
由於您將對其進行極其優化,請考慮以下事項:
Array.Sort在您的數組上運行並執行比較。 在您的情況下,由於您在結構上實現了接口,因此不會取消裝箱。
Array.Sort在排序時執行元素交換。 交換是內部記憶。 您的結構至少需要16個字節。 您可以嘗試通過在類中分配雙精度值來減少影響。 類將始終占用IntPtr.Size字節(因為您將存儲指針),因此它應復制較少的字節。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.