2014-09-24 79 views
1

在一種方法中,我們收到一個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; } 
} 

我在想,如果有一個短達到相同結果的方式? 謝謝你的時間!

回答

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 */ 
+0

如果沒有任何... – 2014-09-24 08:53:04

+0

如果數組不包含任何滿足謂詞的元素,可能會更好使用FirstOrDefault,所以它將返回null而不是拋出'InvalidOperationException'。 – tdragon 2014-09-24 08:53:52

+0

正是我一直在尋找!謝謝你的時間來幫助我! – User999999 2014-09-24 08:56:35

1

只是另一種方式:

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

這裏,只關心雙是否已經找到,而不是返回一個字符串背部。但它完全取決於你想要做什麼。

只要有人想知道,我在LinqPad中測試了它,它確實返回了列表中的第一個雙精度值。

我覺得用這個方法或FirstOrDefault歸結爲兩件事情:

  1. 你想在找到一個值的結果做什麼?要使用

的主要區別

  • 語義,是一個將返回什麼導致它的陣列(FirstOrDefault)和第二隻想說一個人是否被發現在發現。

  • +0

    但是它會返回第一個雙倍還是雙倍? – User999999 2014-09-24 08:55:51

    +0

    是的......我只是想過,我重讀了這個問題。我認爲它可能會返回最後一個......我認爲這更多的是檢查數組是否有雙精度。 – 2014-09-24 08:57:02

    +0

    我剛測試過它,它確實返回第一個值 – 2014-09-24 08:58:08

    相關問題