Добавление значений в массив C #
1462983 просмотра
18 ответа
Вероятно, это действительно очень просто - я начинаю с C # и мне нужно добавить значения в массив, например:
int[] terms;
for(int runs = 0; runs < 400; runs++)
{
terms[] = runs;
}
Для тех, кто использовал PHP, вот что я пытаюсь сделать в C #:
$arr = array();
for ($i = 0; $i < 10; $i++) {
$arr[] = $i;
}
Автор: Ross
Источник
Размещён: 12.11.2019 09:35
Ответы (18)
770 плюса
Вы можете сделать это так -
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();
Автор: Tamas Czinege
Размещён: 14.10.2008 09:08
84 плюса
Если вы пишете на C # 3, вы можете сделать это с помощью одной строки:
int[] terms = Enumerable.Range(0, 400).ToArray();
Этот фрагмент кода предполагает, что у вас есть директива using для System.Linq в верхней части файла.
С другой стороны, если вы ищете что-то, что может быть динамически изменено, как это выглядит в случае с PHP (я никогда не изучал это), то вы можете использовать List вместо int [] , Вот как будет выглядеть этот код:
List<int> terms = Enumerable.Range(0, 400).ToList();
Обратите внимание, однако, что вы не можете просто добавить 401-й элемент, установив термины [400] в значение. Вместо этого вам нужно вызвать Add (), вот так:
terms.Add(1337);
Автор: David Mitchell
Размещён: 15.10.2008 12:30
54 плюса
Использование метода Linq Concat делает это простым
int[] array = new int[] { 3, 4 };
array = array.Concat(new int[] { 2 }).ToArray();
результат 3,4,2
Автор: Yitzhak Weinberg Размещён: 04.04.2017 09:2438 плюса
Ответы о том, как это сделать с помощью массива, приведены здесь.
Тем не менее, в C # есть очень удобная вещь, называемая System.Collections :)
Коллекции - это причудливые альтернативы использованию массива, хотя многие из них используют массив внутри.
Например, 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);
}
Автор: FlySwat
Размещён: 14.10.2008 09:11
10 плюса
Использование списка в качестве посредника - это самый простой способ, как уже описывали другие, но поскольку ваши входные данные являются массивом, а вы не хотите просто хранить данные в списке, я предполагаю, что вы можете быть обеспокоены производительностью.
Наиболее эффективный способ, вероятно, заключается в выделении нового массива и последующем использовании Array.Copy или Array.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;
}
Я также могу опубликовать код для метода расширения Вставка, который принимает целевой индекс в качестве ввода, если это необходимо. Это немного сложнее и использует статический метод Array.Copy 1-2 раза.
Автор: Thracx Размещён: 21.07.2015 02:5910 плюса
Основываясь на ответе Тракса (мне не хватает очков, чтобы ответить):
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;
}
Это позволяет добавить более одного элемента в массив или просто передать массив в качестве параметра для объединения двух массивов.
Автор: Mark Размещён: 11.09.2015 03:518 плюса
Вы должны сначала выделить массив:
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;
}
Автор: Motti
Размещён: 14.10.2008 09:05
5 плюса
int ArraySize = 400;
int[] terms = new int[ArraySize];
for(int runs = 0; runs < ArraySize; runs++)
{
terms[runs] = runs;
}
Это было бы, как я бы кодировал это.
Автор: JB King Размещён: 14.10.2008 09:083 плюса
Массивы 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
2 плюса
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();
Автор: jhyap Размещён: 31.01.2013 07:55/*Выход:
Значение в индексе 0: 400
Значение в индексе 1: 400
Значение в индексе 2: 400
Значение в индексе 3: 400
Значение в индексе 4: 400
Значение в индексе 5: 400
Значение в индексе 6: 400
Значение в индексе 7: 400
Значение в индекс 8: 400
Значение в индексе 9: 400
* /
2 плюса
Вы не можете просто добавить элемент в массив. Вы можете установить элемент в заданной позиции, как указано fallen888 , но я рекомендую использовать вместо него a List<int>
или a Collection<int>
и использовать, ToArray()
если вам нужно, его преобразовать в массив.
1 плюс
Если вам действительно нужен массив, возможно, самое простое:
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();
Автор: Steve
Размещён: 10.05.2015 03:18
1 плюс
Если вы не знаете размер массива или у вас уже есть существующий массив, к которому вы добавляете. Вы можете сделать это двумя способами. Первый - это использование универсального List<T>
: для этого вам нужно преобразовать массив в a 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>
. Если это всего лишь пара элементов, то у него будет лучшая производительность при изменении размера массива. Это потому, что вы берете больше удара для создания List<T>
объекта.
Время в тиках:
3 предмета
Время изменения размера массива: 6
Время добавления списка: 16
400 предметов
Автор: LCarter Размещён: 18.05.2015 11:13Время изменения размера массива: 305
Время добавления списка: 20
1 плюс
Просто другой подход:
int runs = 0;
bool batting = true;
string scorecard;
while (batting = runs < 400)
scorecard += "!" + runs++;
return scorecard.Split("!");
Автор: Ali Humayun
Размещён: 16.09.2014 11:42
1 плюс
Я добавлю это для другого варианта. Я предпочитаю этот тип функциональных линий кодирования больше.
Enumerable.Range(0, 400).Select(x => x).ToArray();
Автор: David
Размещён: 03.06.2019 07:10
0 плюса
int[] terms = new int[400];
for(int runs = 0; runs < 400; runs++)
{
terms[runs] = value;
}
Автор: Johnno Nolan
Размещён: 14.10.2008 09:07
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.*/
}
Автор: user3404904
Размещён: 13.03.2014 10:38
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;
}
Автор: user3404904
Размещён: 13.03.2014 10:44
Вопросы из категории :
- c# Преобразовать десятичную в двойную?
- c# Как рассчитать чей-то возраст в C #?
- c# Как вы сортируете словарь по значению?
- c# В чем разница между int и Integer в Java и C #?
- c# Как создать новый экземпляр объекта из Типа
- c# Datatable против Dataset
- c# Setting Objects to Null/Nothing after use in .NET
- c# Конвертировать целые числа в записанные числа
- c# Почему я не могу иметь абстрактные статические методы в C #?
- c# Как я могу оценить код C # динамически?
- arrays Как удалить дубликаты из массива C #?
- arrays Как определить размер моего массива в C?
- arrays Каков наилучший способ конвертировать массив в хеш в Ruby
- arrays Сравнение двухбайтовых массивов в .NET
- arrays Можно ли выполнять параллельные обходы в MATLAB так же, как в Python?
- arrays Haxe итерация на динамическом
- arrays .Net массивы с нижней границей> 0
- arrays Слияние двух массивов в .NET
- arrays Как удалить объекты из массива в Java?
- arrays ArrayList в Java и ввод