开发者

Linq query to find non-numeric items in list?

Suppose I have the following list:

        var strings = new List<string>();
        strings.Add("1");
        strings.Add("12.456");
        strings.Add("Foobar");
        strings.Add("0.56");
        strings.Add("zero");

Is there s开发者_高级运维ome sort of query I can write in Linq that will return to me only the numeric items, i.e. the 1st, 2nd, and 4th items from the list?

-R.


strings.Where(s => { double ignored; return double.TryParse(s, out ignored); })

This will return all the strings that are parseable as doubles as strings. If you want them as numbers (which makes more sense), you could write an extension method:

public static IEnumerable<double> GetDoubles(this IEnumerable<string> strings)
{
    foreach (var s in strings)
    {
        double result;
        if (double.TryParse(s, out result))
            yield return result;
    }
}

Don't forget that double.TryParse() uses your current culture, so it will give different results on different computers. If you don't want that, use double.TryParse(s, NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out result).


Try this:

    double dummy = 0;
    var strings = new List<string>();
    strings.Add("1");
    strings.Add("12.456");
    strings.Add("Foobar");
    strings.Add("0.56");
    strings.Add("zero");
    var numbers = strings.Where(a=>double.TryParse(a, out dummy));


You could use a simple predicate to examine each string, like so:

var strings = new List<string>();
        strings.Add("1");
        strings.Add("12.456");
        strings.Add("Foobar");
        strings.Add("0.56");
        strings.Add("zero");

var nums = strings.Where( s => s.ToCharArray().All( n => Char.IsNumber( n ) || n == '.' ) );
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜