2011-04-06 87 views
0

我有一個值爲{ "01.0", "01.4", "01.5", "0.20", "02.5", "02.6", "03.0", "03.2" } 的字符串數組我如何使用C#過濾整數值(1,2,3)?整數值的濾波器陣列

+3

你是什麼意思的過濾器?你的意思是選擇索引1,2和3的值嗎? – 2011-04-06 18:27:16

+0

我同意@Chris。需要更多信息。如何僅從數組中返回1,2,3?基本上將所有數字轉換爲整數並刪除所有重複項? – 2011-04-06 18:28:59

+0

我們應該能夠選擇任何形式爲01.0(即1),02.0(是2),03.0 ...等等的值。 – user583126 2011-04-06 18:29:02

回答

3

首先做一個選擇將字符串值轉換爲小數。然後使用餘數函數來查找哪些值的餘數爲零時除以1。這應該只能得到整數值。

var array = new[]{"01.0", "01.4", "01.5", "02.0", "02.5", "02.6", "03.0", "03.2"}; 

array.Select(i => Decimal.Parse(i)).Where(d => Decimal.Remainder(d, 1) == 0); 
+2

如果在運行代碼的操作系統中選擇的區域性文件不使用'.'作爲小數定界符,這將不起作用。另外,「decimal」和「Remainder」對於這項工作來說是不必要的重量級工具。最後,你需要過濾出重複。 – Jon 2011-04-06 18:37:02

+0

偉大的NerdFury。我想我錯過了對剩餘計算的思考。 – user583126 2011-04-06 18:48:08

+0

@Jon - 我認爲混亂是「0.20」的記錄。我認爲這是一個錯字,因爲這個格式與其他格式不一致,以及這個問題的表述方式不一致。問題並不是說需要將重複項過濾掉,但在您的解決方案中,這是必要的。我的解決方案可以像您的解決方案一樣輕鬆實現全球化。而在「重量級」方面 - 表現明智的是,我做了一個測試,其中我篩選了1000000次。我的解決方案每次快40ms。 – NerdFury 2011-04-06 19:01:50

0

只要你的數組是字符串,或者可以轉換成字符串,你可以使用int.Parse(array [here])。

+1

或int.TryParse()以獲取無例外的方法。 – 2011-04-06 18:28:37

+0

您將得到FormatException「輸入字符串的格式不正確。」 – user583126 2011-04-06 18:33:42

3

解析字符串彩車,只選擇那些整數摔掉重複的條目:

var input = new[] { "01.0", "01.4", "01.5", "0.20", "02.5", 
        "02.6", "03.0", "03.2" }; 
var integers = input.Select(i => 
         double.Parse(i, 
         System.Globalization.CultureInfo.InvariantCulture)) 
        .Where(d => d == (int)d) 
        .Distinct().ToArray(); 

答案編輯,以兼顧OP後來的評論。

+0

thnx喬恩。我也很喜歡你的答案,但是不允許我檢查2個答案:) – user583126 2011-04-06 19:05:36

0
var array = new[] { "01.0", "01.4", "01.5", "02.0", "02.5", "02.6", "03.0", "03.2" }; 
int foo; 
var integers = (from a in array where decimal.Remainder(decimal.Parse(a), 1) == 0 select (int)decimal.Parse(a)); 
foreach (var integer in integers) 
{ 
    Console.WriteLine(integer); 
} 
Console.ReadLine();