如果给出以下数字字符串,是否有办法使用LINQ查询一起添加/减去数字?
string numbers = "1 + 1, 2 - 1, 3 + 3";
所以我最终会得到类似的东西:
string numbers = "2, 1, 6";
答案 0 :(得分:3)
您可以使用DataTable.Compute来执行评估,而不是编写自己的评估程序。或者您可以使用DataTable.Expression
using System.Data;
string numbers = "1 + 1, 2 - 1, 3 + 3";
string[] equations = numbers.Split(',');
DataTable dt = new DataTable();
var values =equations.Select(x => dt.Compute(x, null));
var output = string.Join(", ", values);
Console.WriteLine(output);
输出 - 2,1,6
答案 1 :(得分:1)
您必须在方法中执行的数据处理部分,您可以将其作为linq的一部分进行调用
实施例
string processNumber(string numbers)
{
if (numbers.contains("+"))
{
var operands = numbers.Split("+");
return string.Format("{0},",int.Parse(operands[0].Trim()) + int.Parse(operands[1].Trim()));
}
if (numbers.contains("-"))
{
var operands = numbers.Split("-");
return string.Format("{0},",int.Parse(operands[0].Trim()) - int.Parse(operands[1].Trim()));
}
return string.Empty;
}
现在您的Linq查询应该如下所示
string numbers = "1 + 1, 2 - 1, 3 + 3";
string results = string.Concat(numbers.Split(",").Select(x=> ProcessNumber(x)));
答案 2 :(得分:0)
这可能对您有所帮助
Km Price id median
0 139000 8500 2010-holden-cruze-cdx-jg-auto 8500
1 173000 8500 2010-holden-cruze-cdx-jg-auto 8500
2 95000 8800 2008-honda-civic-vti-l-auto 8800
3 141000 8800 2010-holden-cruze-cdx-jg-auto 8500
4 169078 8880 1999-mazda-mx-5-manual 8880
string numbers = "1 + 1,2 - 1,3 + 3";
string output=String.Join(",", numbers.Split(',').Select(x=> getSum(x)));
的定义如下:
getSum()
注意:只有当所有输入都遵循相同的模式时,此方法才能正常工作,其他空格或逗号将导致异常。因为我们正在处理指数。
答案 3 :(得分:0)
using System;
using System.Linq;
public class Program
{
public static void Main()
{
string numbers = "1 + 1, 2 - 1, 3 + 3";
var newnumber = string.Join(", ",numbers.Split(',')
.SelectMany(x => x.Trim().Split(' '))
.Select((x,i) => new {Index = i, Value = x })
.GroupBy(x => x.Index/3, i => i.Value)
.Select(x => {
switch(x.ElementAt(1)){
case "+": return int.Parse(x.ElementAt(0)) + int.Parse(x.ElementAt(2));
case "-": return int.Parse(x.ElementAt(0)) - int.Parse(x.ElementAt(2));
case "/": return int.Parse(x.ElementAt(0)) / int.Parse(x.ElementAt(2));
case "*": return int.Parse(x.ElementAt(0)) * int.Parse(x.ElementAt(2));
default: return 0;
}
}));
Console.WriteLine(newnumber);
}
}
答案 4 :(得分:0)
这应该有效。 您可以根据自己的要求进行修改。
int sum = 0;
int sub = 0;
string numbers = "1 + 1,2 - 1,3 + 3";
string num="";
int count = 1;
string[] words = numbers.Split(',');
foreach (string word in words)
{
if(word.Contains("+"))
{
string[] addition=word.Split('+');
foreach(string value in addition)
{
sum += Convert.ToInt32(value);
}
num=num+sum+",";
sum = 0;
}
if(word.Contains("-"))
{
string[] subtraction = word.Split('-');
foreach (string value in subtraction)
{
if(count==1)
{
sub = Convert.ToInt32(value);
count++;
}
else
{
sub = sub-Convert.ToInt32(value);
}
}
num=num+sub+",";
sub = 0;
}
}
Console.WriteLine(num);