C#一起添加/减去字符串数字

时间:2016-03-11 04:51:10

标签: c# string linq

如果给出以下数字字符串,是否有办法使用LINQ查询一起添加/减去数字?

string numbers = "1 + 1, 2 - 1, 3 + 3";

所以我最终会得到类似的东西:

string numbers = "2, 1, 6";

5 个答案:

答案 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);