如何在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中(每个转换器):
感谢您的精细编辑。感谢您的精细编辑。
函数(姓名、薪水)
它的作用是什么?我想将这些(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,但我建议您先阅读更多关于它的内容。看起来你会想按姓名和年龄分组,而不是只按姓名分组,但仍然要计算工资总额。我想你根本没有读过我的问题。它清楚地表明我想要基于姓名和年龄的总和。请看一看这个例子。