2012-02-11 87 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) _ 
}