从字符串数组中获取第一个双值

时间:2014-09-24 08:48:50

标签: c# arrays

在一种方法中,我们正在接收Array of Strings。在这个数组中,我们必须返回第一个值Double

示例:

String[] myArray = {"abc", "def" , "1.0", "1.1" }; output:1.0
String[] myArray2 = {"abc", "def" , "ij" , "57.0"}; output:57.0
String[] myArray3 = {"11.1","abc", "def" , "ij" , "57.0"}; output:11.1

为实现此目的,我们使用以下代码:

Double i = 0;
foreach(String s in myArray)
{
    Double.TryParse(s, out i);
    if (i > 0)
    { return i; }
}

我想知道是否有更短的方法来达到相同的结果? 谢谢你的时间!

2 个答案:

答案 0 :(得分:4)

double n;
string d = myArray.First(x => double.TryParse(x, out n))

您可以返回n,它将等于第一个有效double的值。顺便说一句,在您的示例中,如果i > 0您正在检查,则应检查TryParse的结果以及 true 是否返回i

编辑:正如评论中所建议的那样,如果数组中没有有效数字,First方法将抛出异常。如果是这种情况,您可以使用FirstOrDefault并检查结果:

string d = myArray.FirstOrDefault(x => double.TryParse(x, out n))

if(d != null) return n;
else /* return a default value */

答案 1 :(得分:1)

另一种方式:

double n;
var doubleFound = myArray.Any(x => double.TryParse(x, out n));

这里,它只关心是否找到了double,而不是返回一个字符串。但它纯粹取决于你想做什么。

只是因为有人想知道,我在LinqPad中对此进行了测试,它确实返回了列表中的第一个双倍。

我觉得使用这种方法或FirstOrDefault归结为两件事:

  1. 您想要查找值的结果是什么?
  2. 您要使用的语义
  3. 主要区别在于,您将返回它在数组中找到的结果(FirstOrDefault),第二个只会说明是否找到了一个结果。