如何在vb.net中对结构数组的相似元素求和?

如何在vb.net中对结构数组的相似元素求和?,.net,vb.net,.net,Vb.net,我有一系列结构: Public Structure emp Public empName As String Public empAge As Int32 Public empsal As Int32 ' salary End Structure 具有30个元素的上述结构的数组。我想求那些emp.empName和emp.empAge相等的emp元素的empsal之和 例如 emp(0).empName = "test" emp(0).empAge = 32 emp(0)

我有一系列结构:

Public Structure emp
    Public empName As String
    Public empAge As Int32
    Public empsal As Int32 ' salary
End Structure
具有30个元素的上述结构的数组。我想求那些
emp.empName
emp.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)和(test1210000)


使用.NET 3.5编辑:编辑样本以将年龄包含在关键字中,并以
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();
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()
我认为在VB中,这将类似于:

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();
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()
有关更多详细信息,请参阅

另外,我建议:

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

编辑:编辑样本以在键中包含年龄,并以
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();
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()
我认为在VB中,这将类似于:

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();
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()
有关更多详细信息,请参阅

另外,我建议:

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

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

在VB中(每个转换器):


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

在VB中(每个转换器):


感谢您的精细编辑。感谢您的精细编辑。
函数(姓名、薪水)
它的作用是什么?我想将这些
(test,20000)和(test1210000)
值存储在emp类型的新数组中。如何实现这一点。我想你错过了这一点:-一个包含30个元素的上述结构的数组。我想对emp.empName和emp.empAge相等的emp元素的emp求和。@RittwickBanerjee:你没有明确表示要考虑年龄,因为你没有在结果中包括年龄。你也没有把结果类型弄清楚。请阅读指南,了解如何提出明确的问题。基本上,您仍然可以使用LINQ,但我建议您先阅读更多关于它的内容。看起来你会想按姓名和年龄分组,而不是只按姓名分组,但仍然要计算工资总额。我想你根本没有读过我的问题。它清楚地表明我想要基于姓名和年龄的总和。请看一看这个例子。
函数(名称,薪水)
它做什么?我想将这些
(test,20000)和(test1210000)
值存储在emp类型的新数组中。如何实现这一点。我想你错过了这一点:-一个包含30个元素的上述结构的数组。我想对emp.empName和emp.empAge相等的emp元素的emp求和。@RittwickBanerjee:你没有明确表示要考虑年龄,因为你没有在结果中包括年龄。你也没有把结果类型弄清楚。请阅读指南,了解如何提出明确的问题。基本上,您仍然可以使用LINQ,但我建议您先阅读更多关于它的内容。看起来你会想按姓名和年龄分组,而不是只按姓名分组,但仍然要计算工资总额。我想你根本没有读过我的问题。它清楚地表明我想要基于姓名和年龄的总和。请看一看这个例子。