Adăugarea de valori pentru o C# matrice

Probabil unul foarte simplu asta - I'm incepand cu C# și necesitatea de a adăuga valori pentru a o matrice, de exemplu:

int[] terms;

for(int runs = 0; runs < 400; runs++)
{
    terms[] = runs;
}

Pentru cei care au folosit PHP, aici's ceea ce am'm încercat să fac în C#:

$arr = array();
for ($i = 0; $i < 10; $i++) {
    $arr[] = $i;
}
Comentarii la întrebare (2)
Soluția

Poti face acest fel -

int[] terms = new int[400];
for (int runs = 0; runs < 400; runs++)
{
    terms[runs] = value;
}

Alternativ, puteți utiliza Liste - avantajul cu liste fiind, nu't trebuie să știți matrice de dimensiune atunci când instantierea lista.

List termsList = new List();
for (int runs = 0; runs < 400; runs++)
{
    termsList.Add(value);
}

// You can convert it back to an array if you would like to
int[] terms = termsList.ToArray();

Edit: a) pentru bucle pe Listă<T> sunt un pic mai mult de 2 ori mai ieftin decât foreach bucle pe Listă<T>, b) Looping pe matrice este de aproximativ 2 ori mai ieftin decât looping pe Listă<T>, c) looping pe matrice folosind pentru este de 5 ori mai ieftin decât looping pe Listă<T> folosind foreach (pe care majoritatea dintre noi).

Comentarii (8)

Daca're scris în C# 3, o poti face cu un one-liner:

int[] terms = Enumerable.Range(0, 400).ToArray();

Acest fragment de cod presupune că aveți o folosind directiva pentru Sistem.Linq la partea de sus a fișierului.

Pe de altă parte, dacă te're în căutarea pentru ceva care pot fi redimensionate dinamic, deoarece se pare că este cazul pentru PHP (I'am mai învățat de fapt), atunci este posibil să doriți să utilizați o Listă în loc de un int[]. Aici's ce care codul ar arata ca:

List terms = Enumerable.Range(0, 400).ToList();

Rețineți, totuși, că nu poți pur și simplu adăugați un 401st element de setare termeni[400] la o valoare. Te'd în schimb, aveți nevoie pentru a apela Add(), astfel:

terms.Add(1337);
Comentarii (0)

Folosind Linq's metoda Concat face acest lucru simplu

int[] array = new int[] { 3, 4 };

array = array.Concat(new int[] { 2 }).ToArray();

rezultatul 3,4,2

Comentarii (1)

Răspunsuri cu privire la modul de a face folosind o matrice sunt oferite aici.

Cu toate acestea, C# are un lucru foarte util numit Sistem.Colecții :)

Colecțiile sunt de lux alternative la utilizarea unei matrice, deși mulți dintre ei folosesc o matrice intern.

De exemplu, C# are o colecție numită Listă care funcționează foarte similar cu PHP array.

using System.Collections.Generic;

// Create a List, and it can only contain integers.
List list = new List();

for (int i = 0; i < 400; i++)
{
   list.Add(i);
}
Comentarii (1)

Bazat pe răspunsul de Thracx (I nu't avea destule puncte pentru răspuns):

public static T[] Add(this T[] target, params T[] items)
    {
        // Validate the parameters
        if (target == null) {
            target = new T[] { };
        }
        if (items== null) {
            items = new T[] { };
        }

        // Join the arrays
        T[] result = new T[target.Length + items.Length];
        target.CopyTo(result, 0);
        items.CopyTo(result, target.Length);
        return result;
    }

Acest lucru vă permite să adăugați mai mult decât doar un element de matrice, sau trece doar o matrice ca un parametru pentru a uni două tablouri.

Comentarii (0)

Folosind o Listă ca un intermediar este cel mai simplu mod, ca altii au descris, dar din moment ce dvs. de intrare este o matrice și don't doar doriți să păstrați datele într-o Listă, presupun că ar putea fi preocupat de performanța.

Cea mai eficientă metodă este probabil alocă o nouă matrice, și apoi folosind Matrice.Copia sau Matrice.CopyTo. Acest lucru nu este greu, dacă doriți doar să adăugați un element la sfârșitul listei:

public static T[] Add(this T[] target, T item)
{
    if (target == null)
    {
        //TODO: Return null or throw ArgumentNullException;
    }
    T[] result = new T[target.Length + 1];
    target.CopyTo(result, 0);
    result[target.Length] = item;
    return result;
}

Nu pot posta, de asemenea, codul pentru a Introduce metoda de extindere care are o destinație indicele de intrare, dacă se dorește. L's un pic mai complicat și utilizează metoda statică Matrice.Copia de 1-2 ori.

Comentarii (1)

Trebuie să aloce matrice prima:

int [] terms = new int[400]; // allocate an array of 400 ints
for(int runs = 0; runs < terms.Length; runs++) // Use Length property rather than the 400 magic number again
{
    terms[runs] = value;
}
Comentarii (0)
int ArraySize = 400;

int[] terms = new int[ArraySize];

for(int runs = 0; runs < ArraySize; runs++)
{

    terms[runs] = runs;

}

Asta ar fi cum am'cod d-l.

Comentarii (0)

C# tablouri sunt de lungime fixă și întotdeauna indexate. Du-te cu Motti's soluție:

int [] terms = new int[400];
for(int runs = 0; runs < 400; runs++)
{
    terms[runs] = value;
}

Rețineți că această matrice este o matrice densa, un bloc contiguu de 400 de bytes în cazul în care vă puteți arunca lucruri. Dacă doriți un mod dinamic de dimensiuni matrice, utilizați o Listă<int>.

List terms = new List();
for(int runs = 0; runs < 400; runs ++)
{
    terms.Add(runs);
}

Nici int[] nici Lista<int> este un tablou asociativ ... asta ar fi un Dicționar<> in C#. Ambele tablouri și liste sunt dense.

Comentarii (0)
int[] terms = new int[10]; //create 10 empty index in array terms

//fill value = 400 for every index (run) in the array
//terms.Length is the total length of the array, it is equal to 10 in this case 
for (int run = 0; run < terms.Length; run++) 
{
    terms[run] = 400;
}

//print value from each of the index
for (int run = 0; run < terms.Length; run++)
{
    Console.WriteLine("Value in index {0}:\t{1}",run, terms[run]);
}

Console.ReadLine();

/*Ieșire:

Valoarea în indicele 0: 400
Valoarea indicelui de 1: 400
Valoarea în indicele 2: 400
Valoarea indicelui 3: 400
Valoarea în index 4: 400
Valoarea în index 5: 400
Valoarea în index 6: 400
Valoarea indicelui 7: 400
Valoarea indicelui 8: 400
Valoarea indicelui 9: 400
*/

Comentarii (2)

Puteți't trebuie doar să adăugați un element la o matrice cu ușurință. Puteți seta elementul de la o anumită poziție ca fallen888 prezentate, dar vă recomandăm să utilizați o Listă "sau o" Colecțieîn loc, și de a folosiToArray()` dacă ai nevoie de ea transformată într-o matrice.

Comentarii (0)

Voi adăuga asta pentru o altă variantă. Eu prefer acest tip de funcționale codificare linii mai mult.

Enumerable.Range(0, 400).Select(x => x).ToArray();
Comentarii (0)

Doar o abordare diferită:

int runs = 0; 
bool batting = true; 
string scorecard;

while (batting = runs < 400)
    scorecard += "!" + runs++;

return scorecard.Split("!");
Comentarii (3)

Dacă aveți într-adevăr nevoie de o matrice următoarele este probabil cea mai simplă:

using System.Collections.Generic;

// Create a List, and it can only contain integers.
List list = new List();

for (int i = 0; i < 400; i++)
{
   list.Add(i);
}

int [] terms = list.ToArray();
Comentarii (0)

Dacă tu nu't știu dimensiunea de Matrice sau au deja o serie existent pe care îl adăugați la. Puteți merge despre acest lucru în două moduri. Prima este folosind un generic Listă<T>: Pentru a face acest lucru, veți dori converti matrice pentru a o var termsList = termeni.ToList(); și de a folosi Add metodă. Atunci când face uz de var termeni = termsList.ToArray(); metoda de a converti înapoi la un tablou.

var terms = default(int[]);
var termsList = terms == null ? new List() : terms.ToList();

for(var i = 0; i < 400; i++)
    termsList.Add(i);

terms = termsList.ToArray();

A doua modalitate este redimensionarea matrice curent:

var terms = default(int[]);

for(var i = 0; i < 400; i++)
{
    if(terms == null)
        terms = new int[1];
    else    
        Array.Resize(ref terms, terms.Length + 1);

    terms[terms.Length - 1] = i;
}

Dacă utilizați .NET 3.5 Matrice.Adaugă(...);

Ambele vă va permite să facă dinamic. Dacă va fi adăugarea de o mulțime de elemente, apoi utilizați doar o Listă. Daca&#39;s doar o pereche de obiecte atunci acesta va avea o performanță mai bună redimensionarea matrice. Acest lucru este pentru că îți ia mai mult de un hit pentru crearea Lista<T> obiect.

*** De ori în căpușe:*

3 puncte

Matrice Redimensiona Data: 6

Listă se Adaugă Data: 16

400 de obiecte

Matrice Redimensiona Timp: 305

Listă se Adaugă Data: 20

Comentarii (0)
            /*arrayname is an array of 5 integer*/
            int[] arrayname = new int[5];
            int i, j;
            /*initialize elements of array arrayname*/
            for (i = 0; i < 5; i++)
            {
                arrayname[i] = i + 100;
            }
Comentarii (0)
         static void Main(string[] args)
        {
            int[] arrayname = new int[5];/*arrayname is an array of 5 integer [5] mean in array [0],[1],[2],[3],[4],[5] because array starts with zero*/
            int i, j;

          /*initialize elements of array arrayname*/
            for (i = 0; i < 5; i++)
            {
                arrayname[i] = i + 100;
            }

             /*output each array element value*/
            for (j = 0; j < 5; j++)
            {
                Console.WriteLine("Element and output value [{0}]={1}",j,arrayname[j]);
            }
            Console.ReadKey();/*Obtains the next character or function key pressed by the user.
                                The pressed key is displayed in the console window.*/
        }
Comentarii (0)
int[] terms = new int[400];

for(int runs = 0; runs < 400; runs++)
{
    terms[runs] = value;
}
Comentarii (0)