2011-04-06 134 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();