Matriz dinâmica em C #


112

Existe algum método para criar uma matriz dinâmica em C #?


1
Se você ainda está preso na lama, usando [] em vez de List <>, você pode usar Array.Resize (). Aqui está um bom exemplo. dotnetperls.com/array-resize
Gian

O link dotnetperls.com/array-resize não está funcionando. (FYI)
Su Llewellyn

Respostas:


150

Dê uma olhada em Listas Genéricas .


13
A pergunta (embora curta e não descritiva) não é sobre uma lista genérica - a pergunta pode ser sobre dynamic[] msdn.microsoft.com/en-GB/library/dd264736.aspx (matriz de tipos dinâmicos) ou ExpandoObject msdn.microsoft.com/ en-us / library /… Eu poderia -1 a resposta por não mencionar isso
Luke T O'Brien

6
@ LukeTO'Brien, a dinâmica foi introduzida no C # 4.0, que foi lançado um ano depois que essa pergunta foi feita originalmente. OP provavelmente estava perguntando sobre uma estrutura de dados redimensionável como en.wikipedia.org/wiki/Dynamic_array
Brian Merrell

6
Respostas consistindo apenas de links para artigos não ajudam. Não há garantia de que o link permanecerá ativo.
JamEngulfer

@JamEngulfer Isso não é verdade. Se o texto do link dele fosse "Olhe para isto" com o link "isto", eu concordaria com você. Se você remover o link e olhar o que resta, a resposta do OP para "dar uma olhada nas listas genéricas" é uma abundância de informações para que qualquer leitor futuro pesquise no Google ...
Lynn Crumbling

88

Expandindo a resposta de Chris e Migol com um exemplo de código.

Usando uma matriz

Student[] array = new Student[2];
array[0] = new Student("bob");
array[1] = new Student("joe");

Usando uma lista genérica. Nos bastidores, a classe List <T> usa um array para armazenamento, mas o faz de uma maneira que permite seu crescimento com eficiência.

List<Student> list = new List<Student>();
list.Add(new Student("bob"));
list.Add(new Student("joe"));
Student joe = list[1];

2
este exemplo é meio ruim, porque nós dois conversamos sobre ArrayList
Migol

21
Esta resposta é melhor do que a sua @Migol, porque mostra como realmente usar a Lista <> em vez de apenas mencioná-la como uma palavra-chave. "meio ruim" -> "meio bom" -> bom
fhugas

56

Às vezes, matrizes simples são preferíveis às listas genéricas, uma vez que são mais convenientes (melhor desempenho para computação cara - Aplicativos de álgebra numérica, por exemplo, ou para troca de dados com software de estatística como R ou Matlab)

Neste caso, você pode usar o método ToArray () após iniciar sua lista dinamicamente

List<string> list = new List<string>();
list.Add("one");
list.Add("two");
list.Add("three");

string[] array = list.ToArray();

Obviamente, isso só faz sentido se o tamanho da matriz nunca for conhecido nem fixado ex-ante . se você já sabe o tamanho do seu array em algum ponto do programa , é melhor iniciá-lo como um array de comprimento fixo. (Se você recuperar dados de um ResultSet, por exemplo, poderá contar seu tamanho e iniciar uma matriz desse tamanho, dinamicamente)


1
Não vale a pena, contanto que você esteja usando o indexador.
aaimnr

2
Ararys não são mais convenientes (eles oferecem um subconjunto da interface List <T>) e oferecem quase o mesmo desempenho, já que List <T> usa array regular por baixo. Iteração para elementos 6000000: Lista / para: Matriz de 1971ms / para: 1864ms (Referência de stackoverflow.com/questions/454916/… )
aaimnr

9
Se você tiver que passar um array para uma interface, deve ser um array. É muito mais fácil construir uma lista e, em seguida, transformá-la em um array antes de passá-la. Gosto desta resposta mais do que das outras porque aborda a questão!
Michael Stimson

36

List<T>para um fortemente tipado, ou ArrayListse você tem .NET 1.1 ou adora lançar variáveis.


2

Exemplo de matriz dinâmica:

Console.WriteLine("Define Array Size? ");
int number = Convert.ToInt32(Console.ReadLine());

Console.WriteLine("Enter numbers:\n");
int[] arr = new int[number];

for (int i = 0; i < number; i++)
{
    arr[i] = Convert.ToInt32(Console.ReadLine());
}
for (int i = 0; i < arr.Length; i++ )
{
    Console.WriteLine("Array Index: "+i + " AND Array Item: " + arr[i].ToString());
}
Console.ReadKey();

2

Você pode fazer isso com objetos dinâmicos:

var dynamicKeyValueArray = new[] { new {Key = "K1", Value = 10}, new {Key = "K2", Value = 5} };

foreach(var keyvalue in dynamicKeyValueArray)
{
    Console.Log(keyvalue.Key);
    Console.Log(keyvalue.Value);
}

1

Use a lista de arrays que na verdade é implementar array. Ele pega inicialmente um array de tamanho 4 e quando fica cheio, um novo array é criado com seu tamanho duplo e os dados do primeiro array são copiados para o segundo array, agora o novo item é inserido no novo array. Além disso, o nome do segundo array cria um alias do primeiro para que possa ser acessado com o mesmo nome do anterior e o primeiro array seja descartado


1

você pode usar um objeto arraylist da classe de coleções

using system.collections;
   static void main()
        {
        Arrylist arr=new Arrylist();
         }

quando você deseja adicionar um elemento, você pode usar

arr.add();

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.