【问题标题】:I need assistance with summing up integers from collection in C#我需要帮助从 C# 中的集合中求和整数
【发布时间】:2017-04-20 09:09:58
【问题描述】:

您好,我正在寻找解决方案,如何将集合中的所有十进制值求和,其中每个字符字母都有自己的值。

例如,假设我正在寻找单词 CAR 的结果。 因为每个字母都代表它的值,所以我希望总结结果,这应该给出适当的输出。在这种情况下 8.5。还有一件事我不在 LINQ 中寻找答案。

Dictionary<char, double Letters = new Dictionary<char, double>(){
                {'A', 1.5}, {'C', 3.9}, {'R', 3.1}, 
            }; 

double result = CalculateScore("Car");

感谢您的帮助,因为我是 C# 新手,并且我已经坚持了一段时间。

【问题讨论】:

  • 你的数字不是整数。你需要一个Dictionary&lt;char, double&gt;(或十进制)
  • 另外,让我们看看你的尝试。
  • 避免那些是 doubles 而不是 int 的事实,你尝试了什么?我的意思是,好吧,CalculateScore 是一个漂亮的函数名称,但是你具体是如何实现这个目标的呢?至少解释一下您是否详细说明了解决问题的任何逻辑并且无法提出有效的代码。
  • 遍历字母,在字典中找到并求和。一些代码会很好。
  • a 也是1.5 还是有它自己的价值?

标签: c#


【解决方案1】:

只需遍历单词的字符并从字典中获取其值。但是,当您当前的字符是小写时,您必须先将其转换为大写。

double CalculateScore(string word)
{
    Dictionary<char, double> letters = new Dictionary<char, double>(){
            {'A', 1.5}, {'C', 3.9}, {'R', 3.1}, 
        }; 
    double sum = 0;
    for(int i = 0; i < word.Length; i++)
    {
        sum += letters[word[i].ToUpper()];
    }
    return sum;
}

为了完整起见,可以通过定位 .NET-framework 3.5 或更高版本来使用 Linq 解决方案,using 用于System.Linq

double CalculateScore(string word)
{
    Dictionary<char, double> letters = new Dictionary<char, double>(){
            {'A', 1.5}, {'C', 3.9}, {'R', 3.1}, 
        }; 
    return word.Sum(x => letters[x].ToUpper());
}

【讨论】:

    【解决方案2】:

    没有Linqhttps://dotnetfiddle.net/lhxpuf

    Dictionary<char, decimal> Letters = new Dictionary<char, decimal>(){
        {'A', 1.5m}, {'C', 3.9m}, {'R', 3.1m}, 
    };
    
    decimal result = 0;
    string input = "CAR";
    foreach (char item in input)
    {
        if (Letters.ContainsKey(char.ToUpper(item)))
        {
            result += Letters[item];
        }
    }
    

    Linqhttps://dotnetfiddle.net/Wxzy09

    Dictionary<char, decimal> Letters = new Dictionary<char, decimal>(){
        {'A', 1.5m}, {'C', 3.9m}, {'R', 3.1m}, 
    };
    string input = "CAR";
    decimal result = input.Where(x => Letters.ContainsKey(x)).Sum(x => Letters[x]);
    

    【讨论】:

      【解决方案3】:

      首先,让我们将字典更改为&lt;char, double&gt;,因为8.5肯定不是int,然后让我们实现CalculateScore(假设'a'和'A'相同):

      private static Dictionary<char, double> Letters = new Dictionary<char, double>()
      {
         {'A', 1.5}, {'C', 3.9}, {'R', 3.1}, 
      };
      
      private static double CalculateScore(string word)
      {
          double result = 0;
          foreach(var c in word)
          {
             var upperChar = char.ToUpperInvariant(c);
             if(Letters.ContainsKey(upperChar)
             {
                result += Letters[upperChar];
             }                      
          }
      
          return result;
      }
      

      现在我们可以使用它了:

      var result = CalculateScore("Car");
      

      【讨论】:

      【解决方案4】:

      int 更改为double,因为您的字典中没有int 值。

      private double CalculateScore(Dictionary<char, double> letters, string word)
      {
          double sum = 0.0;
      
          foreach (char part in word)
          {
              if(letters.ContainsKey(char.ToUpper(part)))
              {
                  sum += letters[part];
              }
          }
      
          return sum;
      }
      

      然后像这样调用方法

      double sum = CalculateScrote(Letters, "Car");
      

      【讨论】:

        猜你喜欢
        • 2010-12-24
        • 1970-01-01
        • 2021-08-14
        • 2016-04-12
        • 1970-01-01
        • 2013-07-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多