从字符串数组中获取第一个双精度值
在一种方法中,我们收到一个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; }
}
我在想,如果有一个短达到相同结果的方式? 谢谢你的时间!
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 */
只是另一种方式:
double n;
var doubleFound = myArray.Any(x => double.TryParse(x, out n));
这里,只关心双是否已经找到,而不是返回一个字符串背部。但它完全取决于你想要做什么。
只要有人想知道,我在LinqPad中测试了它,它确实返回了列表中的第一个双精度值。
我觉得用这个方法或FirstOrDefault
归结为两件事情:
- 你想在找到一个值的结果做什么?要使用
的主要区别
FirstOrDefault
)和第二只想说一个人是否被发现在发现。
但是它会返回第一个双倍还是双倍? – User999999 2014-09-24 08:55:51
是的......我只是想过,我重读了这个问题。我认为它可能会返回最后一个......我认为这更多的是检查数组是否有双精度。 – 2014-09-24 08:57:02
我刚测试过它,它确实返回第一个值 – 2014-09-24 08:58:08
如果没有任何... – 2014-09-24 08:53:04
如果数组不包含任何满足谓词的元素,可能会更好使用FirstOrDefault,所以它将返回null而不是抛出'InvalidOperationException'。 – tdragon 2014-09-24 08:53:52
正是我一直在寻找!谢谢你的时间来帮助我! – User999999 2014-09-24 08:56:35