Если вы действительно хотите убедиться, что строка содержит только число, любое число (целая или плавающая точка) и точно число, вы не можете использовать 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))
}
Можно сделать этот путь -
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();
int[] terms = new int[400];
for(int runs = 0; runs < 400; runs++)
{
terms[runs] = value;
}
Вы не можете только добавить элемент к массиву легко. Можно установить элемент в данной позиции как обрисованный в общих чертах fallen888, но я рекомендую использовать List<int>
или Collection<int>
вместо этого, и использование ToArray()
, если Вам нужен в преобразованный в массив.
int ArraySize = 400;
int[] terms = new int[ArraySize];
for(int runs = 0; runs < ArraySize; runs++)
{
terms[runs] = runs;
}
, Который был бы, как я кодирую его.
Массивы 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#. И массивы и списки являются плотными.
Необходимо выделить массив сначала:
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;
}
Если Вы пишете в C# 3, можно сделать это с остротой:
int[] terms = Enumerable.Range(0, 400).ToArray();
Этот фрагмент кода предполагает, что у Вас есть директива использования для Системы. Linq наверху Вашего файла.
, С другой стороны, если Вы ищете что-то, что может быть динамично изменено, как это появляется, имеет место для PHP (я на самом деле никогда не изучал его), тогда можно хотеть использовать Список вместо интервала []. Вот то, что , что код был бы похож:
List<int> terms = Enumerable.Range(0, 400).ToList();
Примечание, однако, что Вы не можете просто добавить 401-й элемент путем устанавливания сроков [400] к значению. Необходимо было бы вместо этого звонить, Добавляют (), как это:
terms.Add(1337);
Ответы о том, как сделать это с помощью массива, предоставлены здесь.
Однако 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);
}