【问题标题】:How to sum similar element of an array of structure in vb.net?如何在 vb.net 中对结构数组的相似元素求和?
【发布时间】:2012-02-12 00:54:01
【问题描述】:

我有一个结构数组:

Public Structure emp
    Public empName As String
    Public empAge As Int32
    Public empsal As Int32 ' salary
End Structure

具有 30 个元素的上述结构的数组。我想将 emp.empNameemp.empAge 相等的那些 emp 元素的 empsal 相加。

例如

emp(0).empName = "test"
emp(0).empAge = 32
emp(0).empsal = 10000

emp(1).empName = "test"
emp(1).empAge = 32
emp(1).empsal = 10000

emp(2).empName = "test12"
emp(2).empAge = 32
emp(2).empsal = 10000

如何做到这一点,以使结果为 (test,20000) 和 (test12,10000)

使用 .NET 3.5

【问题讨论】:

  • 感谢您的精心编辑。

标签: .net vb.net


【解决方案1】:

编辑:编辑样本以在键中包含年龄,并以 emp 数组结尾。

当然。您应该为此查看 LINQ - 您基本上希望按姓名和年龄分组,然后汇总薪水。在 C# 中,您会编写如下内容:

var query = employees.GroupBy
     (x => new { x.empName, x.empAge },
      x => x.empSal,
      (key, salaries) => new emp { empName = key.empName,
                                   empAge = key.empAge,
                                   empSalary = salaries.Sum() })
var array = query.ToArray();

认为在 VB 中会是这样的:

Dim query = employees.GroupBy( _
    Function(x) New With { Key .Name = x.empName, Key .Age = x.empAge }, _
    Function(x) x.empSal, _
    Function(k, salaries) New Emp With _
         { .empName = k.Name, .empAge = k.Age, .empSalary = salaries.Sum() }_
    )
Dim array = query.ToArray()

有关详细信息,请参阅GroupBy documentation

顺便说一句,我建议:

  • 为您的类型提供一个遵循 .NET 命名约定的更完整的名称
  • 使它成为一个类而不是一个结构(它不是一个真正的单一值,例如 int
  • 使用属性而不是公共字段
  • 从字段/属性中删除 emp 前缀 - 毕竟它们已经是员工类型的一部分

【讨论】:

  • Function(name, salaries) 是做什么的?
  • 我想将这些(test,20000) and (test12,10000) 值存储在一个新的emp 类型数组中。如何实现这一目标。
  • 我想你错过了这一点:- 上述结构的数组,包含 30 个元素。我想对那些 emp.empName 和 emp.empAge 相等的 emp 元素的 empsal 求和。
  • @RittwickBanerjee:嗯,你没有明确表示你想考虑年龄——因为你没有在结果中包括年龄。您也根本没有明确结果类型。请阅读tinyurl.com/so-hints 了解如何提出明确问题的指南。基本上你仍然可以使用 LINQ,但我建议你先阅读更多关于它的内容。看起来您希望按姓名和年龄分组,而不是按姓名分组,但仍要对薪水求和。
  • 我认为您根本没有阅读我的问题。它清楚地表明我想要基于姓名和年龄的总和。请看示例。
【解决方案2】:

按姓名和年龄分组,您可以在 C# 中执行以下操作:

var query= from e in employees
  group e by new {e.empName, e.empAge} into g
  select new {Name=g.Key, Value=g.Sum(x=> x.empSal)};

在 VB 中(每个转换器):

Dim query= From g In From e In employeesGroup e By New From { _
    e.empName, _
    e.empAge _
}New With { _
    Key .Name = g.Key, _
    Key .Value = g.Sum(Function(x) x.empSal) _
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-12
    • 1970-01-01
    • 2014-12-15
    • 1970-01-01
    • 1970-01-01
    • 2014-08-18
    • 1970-01-01
    • 2019-02-24
    相关资源
    最近更新 更多