2016-05-31 200 views
2

我正在尋找更好的方式來初始化我的lst_devices : TArray<String>變量。 (這非常醜陋,它是一種代碼味道,但至少可以正常工作)。德爾福 - 如何初始化字符串的TArray?

lst_devices_id := ['', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 
     '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 
     '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 
     '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 
     '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 
     '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 
     '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 
     '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '']; 

我該如何改進?

回答

7

字符串默認初始化爲空字符串。所以,你可以依靠,像這樣:

SetLength(lst_devices_id, N); 

在這裏,您分配了數組元素的期望數量,依靠編譯器爲默認初始化它們爲空字符串。請注意,這依賴於之前未初始化的陣列。如果不是這種情況,那麼你必須首先完成它。

Finalize(lst_devices_id); 
SetLength(lst_devices_id, N); 
+0

是不是「lst_devices_id:= nil;」更優雅,然後使用低級函數作爲Finalize? –

+2

@ZENsan Finalize是一個完全相同的東西。從某種意義上講,它是一個高級函數,因此您需要從代碼中使用它,並且它不僅適用於內部RTL代碼。拿你的選擇。 –

+0

非常感謝您的解釋。這就是爲什麼問,爲我說清楚。 –