簡體   English   中英

大小未知的C#數組

[英]C# arrays with unknown size

我需要帶有數組的類:

class FirstClass
{
     int x = 0;
     int y = 0;
}

class SecondClass
{
    FirstClass[] firstclass = ???????? // size of array is unknown
    OtherClass[][] otherclass = ???????? // i need also multidimensional array or array of arrays
}

通常我出於這種目的使用List<> ,但是今天我需要最快的解決方案(大量數據要處理),我認為Array應該比List快(我讀過List比Array慢很多的地方) )。

問題是-將什么放入“ ????????” 在我的代碼中?

編輯:

我的課是一個神經網絡對象。 最大的數組將包含學習數據(100000+個數據行,其中包含50+個字段,float或double數據類型)。

如果數組比列表快1%-我需要數組。

在知道數組的確切大小之前,您無法創建數組:與列表不同,數組不能增長* ; 一旦您給他們一個尺寸,他們將永遠保持該尺寸。 如果必須要處理一個數組,請首先創建一個List<T> ,填充它,然后使用ToArray()方法轉換為數組:

var firstClassList = new List<FirstClass>();
firtstClassList.Add(new FirstClass(123));
firtstClassList.Add(new FirstClass(456));
FirstClass firstClass[] = firtstClassList.ToArray();

var otherClassList = new List<List<OtherClass>>();
otherClassList.Add(new List<OtherClass>());
otherClassList[0].Add(OtherClass(10));
otherClassList[0].Add(OtherClass(11));
otherClassList.Add(new List<OtherClass>());
otherClassList[1].Add(OtherClass(20));
otherClassList[1].Add(OtherClass(21));
otherClassList[1].Add(OtherClass(22));
OtherClass otherClass[][] = otherClassList.Select(r => r.ToArray()).ToArray();

但是請注意,這是過早的優化:列表與數組一樣快,但是它們提供了更多的靈活性。 用數組替換列表沒有意義,至少在配置文件之前沒有意義。


*更改數組大小的Array.Resize調用不算作“增長”數組,因為最終會得到一個不同的數組實例,而您試圖“增長”的那個實例在復制后立即被丟棄。 。

如果不確定數組的大小,則可能要考慮使用其他類型的集合,例如您提到的List<FirstClass>或ArrayList等。

從性能角度來看,在您實際測試數據之前,使用List可能會很好,如果仍然有問題或瓶頸,請考慮使用Array或更有效的結構。 (除非您使用大量數據,否則運行時間應該不會有太大差異。)

(總是有將列表轉換為數組的選項。)

為什么數組比列表快? 請參閱此問題以比較運行時間。

我能想到的唯一情況是數組在列表中勝出是您是否需要搜索元素,並且對數組進行了排序,因此可以進行二進制搜索。 但是,由於可以在C#中使用[]為List <T>編制索引,因此這是一個有爭議的問題。

var list = new List<FirstClass>();
list.Add(object);

FirstClass[] firstClass = list.ToArray();

var listOfLists = new List<List<SecondClass>>();
var item1 = new List<SecondClass>();
item1.Add(anotherObject);
listOfLists.Add(item1);

SecondClass[][] secondClass = listsOfLists.Select(i => i.ToArray()).ToArray();

您可以像這樣實例化它們:

FirstClass[] firstclass = new FirstClass[];
OtherClass[][] otherclass = new OtherClass[][];

然后,只要需要添加元素,就可以使用Add方法:

firstclass.Add(new FirstClass());

暫無
暫無

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

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