簡體   English   中英

C#結構排序數組

[英]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毫秒。 有沒有更好的排序方法?

由於您將對其進行極其優化,請考慮以下事項:

  1. Array.Sort在您的數組上運行並執行比較。 在您的情況下,由於您在結構上實現了接口,因此不會取消裝箱。

  2. Array.Sort在排序時執行元素交換。 交換是內部記憶。 您的結構至少需要16個字節。 您可以嘗試通過在類中分配雙精度值來減少影響。 類將始終占用IntPtr.Size字節(因為您將存儲指針),因此它應復制較少的字節。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM