Mam tablicę ciągów. Co to jest najprostszym sposobem, aby sprawdzić, czy wszystkie elementy tablicy są liczbamiNajprostszy sposób sprawdzania numerów
string[] str = new string[] { "23", "25", "Ho" };
Mam tablicę ciągów. Co to jest najprostszym sposobem, aby sprawdzić, czy wszystkie elementy tablicy są liczbamiNajprostszy sposób sprawdzania numerów
string[] str = new string[] { "23", "25", "Ho" };
Jeśli dodać odwołanie do zespołu Microsoft.VisualBasic
, można użyć następującego jedno-liner:
bool isEverythingNumeric =
str.All(s => Microsoft.VisualBasic.Information.IsNumeric(s));
Clever +1 ... out-of-the-box myślenie –
+1, ten pomysł mnie przeraża, ale, cholera, to działa =) –
Po co używać czegoś, co wydaje się tak charakterystyczne dla VisualBasic? – davidfowl
Spróbuj tego:
string[] str = new string[] { "23", "25", "Ho" };
double trouble;
if (str.All(number => Double.TryParse(number, out trouble)))
{
// do stuff
}
Przyjemny pomysł, ale zadziała to tylko wtedy, gdy wszystkie liczby mieszczą się wewnątrz Int32. – Konamiman
W takim przypadku funkcja double.TryParse powinna działać. –
wykorzystując fakt, że ciąg jest również tablica znaków, można zrobić coś tak:
str.All(s => s.All(c => Char.IsDigit(c)));
Ale to nie zadziała z ciągami zawierającymi białe znaki. A co z notacją naukową? –
wydaje się, że musimy zdefiniować, co jest najpierw numerem =) –
Kona ... co z -1? To nie jest zdanie: P Tylko pytanie;) –
można to zrobić:
var isOnlyNumbers = str.All(s =>
{
double i;
return double.TryParse(s, out i);
});
Dlaczego anonimowy downwise? –
Albo bez LINQ ...
bool allNumbers = true;
foreach(string str in myArray)
{
int nr;
if(!Int32.TryParse(str, out nr))
{
allNumbers = false;
break;
}
}
Jak na temat korzystania z wyrażeń regularnych?
using System.Text.RegularExpressions;
...
bool isNum= Regex.IsMatch(strToMatch,"^\\d+(\\.\\d+)?$");
proszę określić liczbę: jego Int32, dziesiętnej, float punkt? –