【问题标题】:Creating an Array or List to Count Values创建一个数组或列表来计算值
【发布时间】:2018-10-16 06:12:22
【问题描述】:

我想对关联数组中的项目进行计数。我已经编写了一小段代码,但现在我认为它不起作用。我应该使用什么策略?

我已经创建了一个类

public class itemsList
{
     public string itemName;
     public int itemCount;
}

计算代码如下(将下面代码中的items视为一个数组)

foreach (var item in items)
{
     //this is pseudo, I want help in this
     if (itemsList.Contain("itemName", item)
          itemsList[item].itemCount++;
     else
          itemsList.Add(item, 1);
}

请记住,此数组稍后将更改为json,格式如下。

"apples": 10,
"oranges": 4
....

【问题讨论】:

  • 检查itemsList[item] 是否一无所获。那么密钥不存在
  • @Fabjan 我认为这是最好的答案
  • @Fabjan 让我试试这个,以前没用过,希望对你有帮助
  • @Fabjan 非常感谢您的帮助。一切都像我现在想要的那样工作:)

标签: c# .net arrays arraylist


【解决方案1】:

如前所述,Dictionary<TKey, TValue> 这里是一个更好的选择:

private readonly Dictionary<string, int> ItemsDict = new Dictionary<string, int>();

那么你需要做的就是:

string someItemName = "itemName";

if(!ItemsDict.ContainsKey(someItemName))
{
    ItemsDict.Add(someItemName, 1);
}
else 
{
    ItemsDict[someItemName]++;
}

根据您的需要,您可能还想使用某个类作为值:

public class itemsList
{
     public string itemName;
     public int itemCount;
}

...

private readonly Dictionary<string, itemsList> ItemsDict = new Dictionary<string, itemsList>();
// here we add an object
ItemsDict.Add(someItemName, myItem);

【讨论】:

    【解决方案2】:

    您可以使用 LINQ GroupBy 并创建一个具有属性 itemNameitemCount 的匿名类。存储在列表result 中的每个匿名对象都包含项目名称和项目计数。

    var result = items.GroupBy(item => item)
                      .Select(group => new
                       {
                           itemName = group.Key,
                           itemCount = group.Count()
                       }).ToList();
    

    【讨论】:

      猜你喜欢
      • 2022-11-28
      • 2017-11-20
      • 1970-01-01
      • 2020-03-30
      • 2013-01-18
      • 1970-01-01
      • 2021-08-21
      • 2014-11-05
      • 2019-03-11
      相关资源
      最近更新 更多