Добавление значений в массив C#



вероятно, это очень просто - я начинаю с C# и мне нужно добавить значения в массив, например:



int[] terms;

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


для тех, кто использовал PHP, вот что я пытаюсь сделать в C#:



$arr = array();
for ($i = 0; $i < 10; $i++) {
$arr[] = $i;
}
1146   17  

17 ответов:

Вы можете сделать так -

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

кроме того, вы можете использовать списки - преимущество со списками, вам не нужно знать размер массива при создании экземпляра списка.

List<int> termsList = new List<int>();
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)на петли на List немного более чем в 2 раза дешевле, чем foreach loops on List, b) цикл по массиву примерно в 2 раза дешевле, чем цикл по списку, c) цикл по массиву с использованием на is 5 в разы дешевле, чем цикл по списку с помощью foreach (который большинство из нас).

Если вы пишете на C# 3, Вы можете сделать это с одной строкой:

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

этот фрагмент кода предполагает, что у вас есть директива using для System.Linq в верхней части вашего файла.

С другой стороны, если вы ищете что-то, что может быть динамически изменено, как это происходит в случае PHP (я никогда не изучал его), то вы можете использовать список вместо int[]. Вот что это код будет выглядеть например:

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

обратите внимание, однако, что вы не можете просто добавить 401st элемент, установив условия[400] в значение. Вместо этого вам нужно будет вызвать Add (), например:

terms.Add(1337);

ответы о том, как это сделать с помощью массива приведены здесь.

однако, C# имеет очень удобную вещь, называемую системой.Коллекции :)

коллекции являются причудливыми альтернативами использованию массива, хотя многие из них используют массив внутри.

например, C# имеет коллекцию под названием List, которая функционирует очень похоже на массив PHP.

using System.Collections.Generic;

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

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

С помощью Linq ' s метод функция concat делает это просто

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

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

результат 3,4,2

сначала нужно выделить массив:

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;
}

использование списка в качестве посредника-это самый простой способ, как описывали другие, но поскольку ваш вход является массивом, и вы не просто хотите сохранить данные в списке, я предполагаю, что вас может беспокоить производительность.

наиболее эффективным методом, вероятно, является выделение нового массива, а затем использование массива.Копировать или массив.Метод CopyTo. Это не сложно, если вы просто хотите, чтобы добавить элемент в конец списка:

public static T[] Add<T>(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;
}

Я также могу разместить код для вставки метод расширения это принимает целевой индекс в качестве входных данных, если это необходимо. Это немного сложнее и использует статический метод массива.Копировать 1-2 раза.

на основе ответа Фракса (у меня нет достаточно очков, чтобы ответить):

public static T[] Add<T>(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;
    }

Это позволяет добавить в массив более одного элемента или просто передать массив в качестве параметра для соединения двух массивов.

int ArraySize = 400;

int[] terms = new int[ArraySize];


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

    terms[runs] = runs;

}

вот как бы я его закодировал.

массивы C# имеют фиксированную длину и всегда индексируется. Идите с решением Мотти:

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

обратите внимание, что этот массив представляет собой плотный массив, непрерывный блок 400 байт, где вы можете оставить вещи. Если вам нужен массив динамического размера, используйте List.

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

ни int [], ни List не являются ассоциативным массивом-это был бы словарь в C#. И массивы, и списки являются плотными.

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();

/*выход:

значение в индексе 0: 400
значение в индексе 1: 400
значение в индексе 2: 400
значение в индексе 3: 400
значение в индексе 4: 400
значение в индексе 5: 400
значение в индексе 6: 400
значение в индексе 7: 400
значение в индексе 8: 400
значение в индексе 9: 400
*/

вы не можете просто добавить элемент в массив легко. Вы можете установить элемент в заданной позиции как fallen888 изложил, но я рекомендую использовать List<int> или Collection<int> вместо этого, и использовать ToArray() Если вам нужно преобразовать его в массив.

Если вам действительно нужен массив следующее, вероятно, самое простое:

using System.Collections.Generic;

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

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

int [] terms = list.ToArray();

если вы не знаете размер массива или уже существующий массив, который вы добавляете на. Вы можете сделать это двумя способами. Первый-это использование общего List<T>: Для этого вам нужно будет преобразовать массив в var termsList = terms.ToList(); и использовать метод Add. Затем, когда закончите использовать var terms = termsList.ToArray(); метод для преобразования обратно в массив.

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

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

terms = termsList.ToArray();

второй способ-это изменение размера текущего массива:

var terms = default(int[]);

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

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

если вы используете .NET 3.5 Array.Add(...);

оба этих позволит вам сделать это динамически. Если вы будете добавлять много элементов, то просто используйте List<T>. Если это всего лишь несколько элементов, то он будет иметь лучшую производительность изменения размера массива. Это потому, что вы берете больше хита для создания

просто другой подход:

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

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

return scorecard.Split("!");
int[] terms = new int[400];

for(int runs = 0; runs < 400; runs++)
{
    terms[runs] = value;
}
         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.*/
        }
            /*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;
            }

Comments

    Ничего не найдено.