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

Если вы действительно хотите убедиться, что строка содержит только число, любое число (целая или плавающая точка) и точно число, вы не можете использовать parseInt() / parseFloat(), Number() или !isNaN() сами по себе. Обратите внимание, что !isNaN() на самом деле возвращает true, когда Number() вернет число, а false, когда он вернет NaN, поэтому я исключу его из остальной части обсуждения.

] Проблема с parseFloat() в том, что она вернет число, если строка содержит любое число, даже если строка не содержит только и точно число:

parseFloat("2016-12-31")  // returns 2016
parseFloat("1-1") // return 1
parseFloat("1.2.3") // returns 1.2

Проблема с Number() заключается в том, что она вернет число в случаях, когда переданное значение не является числом вообще!

Number("") // returns 0
Number(" ") // returns 0
Number(" \u00A0   \t\n\r") // returns 0

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

Однако оказывается, что Number()isNaN()) делает правильную вещь для каждого случая, когда parseFloat() возвращает число, когда оно должно 't, и наоборот. Итак, чтобы узнать, действительно ли строка точно и только число, вызовите обе функции и посмотрите, верят ли они оба :

function isNumber(str) {
  if (typeof str != "string") return false // we only process strings!
  // could also coerce to string: str = ""+str
  return !isNaN(str) && !isNaN(parseFloat(str))
}
448
задан AustinWBryan 24 August 2018 в 18:15
поделиться

8 ответов

Можно сделать этот путь -

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

Редактирование: a) для циклы на List< T> являются больше чем в 2 раза более дешевыми, чем foreach циклы на List< T>, b) Цикличное выполнение на массиве является приблизительно в 2 раза более дешевым, чем цикличное выполнение на List< T>, c) цикличное выполнение на массиве с помощью для является в 5 раз более дешевым, чем цикличное выполнение на List< T> с помощью [1 110] foreach (который большинство из нас делает).

744
ответ дан Community 24 August 2018 в 18:15
поделиться
int[] terms = new int[400];

for(int runs = 0; runs < 400; runs++)
{
    terms[runs] = value;
}
0
ответ дан Johnno Nolan 24 August 2018 в 18:15
поделиться

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

2
ответ дан AlexB 24 August 2018 в 18:15
поделиться
int ArraySize = 400;

int[] terms = new int[ArraySize];


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

    terms[runs] = runs;

}

, Который был бы, как я кодирую его.

5
ответ дан JB King 24 August 2018 в 18:15
поделиться

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

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

Никакой интервал [], ни List< интервал> является ассоциативным массивом - который был бы Dictionary<> в C#. И массивы и списки являются плотными.

4
ответ дан Peter Mortensen 24 August 2018 в 18:15
поделиться

Необходимо выделить массив сначала:

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;
}
8
ответ дан Motti 24 August 2018 в 18:15
поделиться

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

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

Этот фрагмент кода предполагает, что у Вас есть директива использования для Системы. Linq наверху Вашего файла.

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

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

Примечание, однако, что Вы не можете просто добавить 401-й элемент путем устанавливания сроков [400] к значению. Необходимо было бы вместо этого звонить, Добавляют (), как это:

terms.Add(1337);
84
ответ дан David Mitchell 24 August 2018 в 18:15
поделиться

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

Однако C# имеет очень удобную вещь под названием Система. Наборы:)

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

, Например, C# имеет набор под названием Список, который функционирует очень похожий на массив 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);
}
37
ответ дан FlySwat 24 August 2018 в 18:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: