2013-07-03 57 views
1

如何通過名稱(或值)而不是索引找到數組中項目的值?例如:
;得到名稱ID = 1如何通過名稱(或值)而不是索引找到數組中項目的值?

我有一個對象數組,其中每個對象都有一個子數組。我想按字母順序排列ID在父對象中的位置,並且名稱位於子數組中...

父數組(MyObjects)中的每個對象都是這樣的形狀;

Index, _itemID, _price, NamesIDs [] 

每個對象(MyObjects._aSingleAssignment.NamesIDs)中的子數組都是這樣的形狀;

Index, _ itemID, _name 

我沒建這個東西,所以藉口瘋狂,但父陣列具有項目ID和價格,子陣列具有系統中的所有項目編號和名稱的列表...對於任何給定ID(父數組),我如何得到它的名稱(子數組)?

我知道如何在任何給定索引處獲得_itemID;

MyControl _aSingleAssignment = this.MyObjects[i] as MyControl; 
int _itemID = _aSingleAssignment.ID; // The ID for the currently evaluated item 

我知道如何從子數組中的任何給定索引獲取名稱;

string _itemName = _aSingleAssignment.NamesIDs[i].Name; 

但是,當給定ID而不是通過索引拉出它時,如何獲得名稱?如果我通過索引拉它,我必須遍歷子數組中的每個項目並進行比較。我不介意迭代,但我認爲必須有一個更簡單的方法。

我想要做的事,如:

string _itemName = _aSingleAssignment.NamesIDs[ID == _itemID].Name;

如果只是抓住了ID的名稱相匹配。

這個練習的要點是我父陣列按字母順序排序,而不是數字(的.sort())

謝謝你們!

+0

請還附上你處理的對象的代碼。 –

回答

2

嘗試使用LINQ:

var foundObj = this.MyObjects.OfType<MyControl>() 
          .Where(n=>n.ID == _itemID) 
          .FirstOrDefault(); 

如果你有相同的ID多個項目,你應該叫.ToList() insted的的.FirstOrDefault()

如果你想元素alphabetacally排序 - 使用.OrderBy() extention方法:

var sorted = this.MyObjects.OfType<MyControl>() 
           .OrderBy(n=>n.Name) 
           .ToList(); 

請看以下鏈接瞭解更多信息:

LINQ: .NET Language-Integrated Query

101 LINQ Samples

LINQPad - Handy utility for learning LINQ

+0

您應該使用'OfType '而不是鑄造 – Sayse

+0

謝謝,它看起來像以下是在正確的軌道上; .Where(n => n.ID == MyObjects.PriceLevels [i] .ID),因爲它應該將父ID與子數組ID相匹配。但一旦發現父母ID,它應該返回姓名。我將研究那些有關LINQ的鏈接並回來。謝謝! – BClaydon

+1

@Alexey Aza - 非常感謝您的幫助。我研究了LINQ,發現我需要提出一個非常不同的問題。我發佈它在這裏:http://stackoverflow.com/questions/17496107/linq-join-and-orderby-issues我試圖刪除這個問題,但無法弄清楚如何......但謝謝! – BClaydon

相關問題