Добавление значений в массив 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;
}
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();
Если вы пишете на 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("!");
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