Jak pracovat z 1D pole Když nemůžu předvídat jeho délku?

hlasů
0

Duplikát

Array blíže nedefinované délky, v C #

Jak mohu inicializovat řetězec [], aniž by bylo potřeba inicializace délku? Chci, aby to bylo dynamické pole, takže když přidám něco délka roste a žádná výjimka vyvolává?

Měl jsem prostě použít nějaký seznam?

Položena 04/04/2009 v 02:39
zdroj uživatelem
V jiných jazycích...                            


7 odpovědí

hlasů
6

Pokud potřebujete mít řadu Neznámého délky strings, použijte List<T>z System.Collections.Genericnázvů.

List<string> myList = new List<string>();
myList.Add("First");
myList.Add("Second");
myList.Add("Third");
myList.Count // = 3

Používá řadu zákulisí, které má pevnou velikostí, ale skrývá fakt, že to bude dělat pole větší a přesunout všechny prvky, kdy dojdou prostoru.

Odpovězeno 04/04/2009 v 02:51
zdroj uživatelem

hlasů
3

Seznam <T> bude dělat to, co chcete. To má ToArray () metodu, která vrátí pole, když dokončíte přidávání položek (pokud jste ještě potřebovat pole).

Odpovězeno 04/04/2009 v 02:51
zdroj uživatelem

hlasů
1

No, v Fortran můžete použít přidělit.

Odpovězeno 04/04/2009 v 02:46
zdroj uživatelem

hlasů
1

Jaký jazyk?

C #, Java, a mnoho jiných jazyků na vysoké úrovni má ArrayListdatovou strukturu (nebo něco podobného), který vám umožní přidávat a odebírat prvky bez nastavení určitou velikost.

Odpovězeno 04/04/2009 v 02:45
zdroj uživatelem

hlasů
1

Pole mají pevnou délku ve většině jazyků. Budete muset použít dynamický datový typ jako seznam, pokud budete potřebovat dynamický délku.

V případě, že jazyk není suport seznamy nativně, oni jsou obvykle prováděny s poli. V případě, že obsah bude toužit, aby se vešly do pole, delší pole je přiděleno, obsah zkopírovaný ze staré pole do nového, a konečně starý pole je uvolněno.

Jsem si naprosto jistý, že je dynamický typ délka ve vašem jazyce nebo v jednom ze svých knihoven.

AKTUALIZACE

Pro C # třídy kolekce se nacházejí ve System.Collectionsjmenném prostoru. Měli byste se zaměřit na generických tříd System.Collections.Generic, pokud je to možné. Čtyři váš případ generické List<String>pravděpodobně hodí nejlépe. Ale také Stack<String>, nebo Queue<String>by mohlo být zajímavé.

Odpovězeno 04/04/2009 v 02:45
zdroj uživatelem

hlasů
1

Myslím, že mnoho jazyků tam bude přidělovat celého pole jako blok vepředu. Možná budete muset použít souhrnný třídy, která poskytuje tuto funkci. V nepřítomnosti jazyka určeného, ​​Java a C ++ například int [] bude souvislý blok paměti. Budete muset přidělit nový blok a zkopírujte starý obsah, nebo použít obal, který spravuje za vás, a to buď dělat to samé, nebo pomocí ukazatele na objekty. To by bylo ArrayList nebo podobné v Javě.

Odpovězeno 04/04/2009 v 02:44
zdroj uživatelem

hlasů
0

Pokud se vaše C # použít ArrayList. Dynamicky rozšiřuje, jak budete potřebovat, a to také může obsahovat cokoliv (to může být dobré i špatné). Takže ano, měli byste použít nějaký seznam. Také si pamatuji, aby se tato pomocí příkazu:

using System.Collections;
Odpovězeno 04/04/2009 v 02:44
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more