2012-02-11 100 views
2

我有结构的阵列:如何在vb.net中总结结构数组的类似元素?

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

上述结构的阵列与30元件。我想总结那些相同的 & emp.empAge的元素的empsal

for ex。

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 

如何才能做到这一点,这样的结果将是(试验,20000)和(test12,10000)

使用.NET 3.5

+0

感谢这一优良编辑。 – 2012-02-11 15:36:03

回答

4

编辑:编辑该采样以包括在密钥年龄,并用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前缀属性 - 他们已经雇员类型的一部分,所有
+0

'函数(名称,工资)'它做了什么? – 2012-02-11 16:16:09

+0

我想将这些'(test,20000)和(test12,10000)'值存储在emp类型的新数组中。如何实现这一点。 – 2012-02-11 16:20:02

+0

我想你错过了这一点: - **一个具有30个元素的上述结构的数组。我想总结emp.empName&emp.empAge是相等的那些emp元素的empsal。** – 2012-02-11 16:29:52

0

分组的名字和年龄,你可以做这样的事情在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) _ 
}