如何通过名称(或值)而不是索引找到数组中项目的值?

时间:2013-07-03 19:26:34

标签: c# arrays

如何通过名称(或值)而不是索引找到数组中项目的值?
例如;获取名称ID = 1

我有一个对象数组,其中每个对象都有一个子数组。我想按字母顺序排序ID在父对象中的位置,而Name在子数组中...

父数组(MyObjects)中的每个对象都是这样的形状;

Index, _itemID, _price, NamesIDs []

每个对象中的子数组(MyObjects._aSingleAssignment.NamesIDs)的形状如下;

Index, _ itemID, _name

我没有构建这个东西,所以请原谅疯狂,但是父数组有Item ID和Price,子数组有一个系统中所有Item ID和Name的列表...对于任何给定的ID(父数组) ),如何获取其名称(子数组)?

我知道如何在任何给定的索引处获得_itemID;

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

我知道如何从子数组中的任何给定索引获取Name;

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

但是如何在获得ID时获取名称而不是通过索引将其拉出来?如果我通过索引拉它,我必须迭代子数组中的每个项目并进行比较。我不介意迭代,但我认为必须有一个更简单的方法。

我想做类似的事情:

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

在哪里抓取与ID匹配的名称。

本练习的目的是按字母顺序排序我的父数组而不是数字排序(.sort())

谢谢你们!

1 个答案:

答案 0 :(得分:2)

尝试使用LINQ:

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

如果您有多个具有相同ID的项目,则应致电.ToList() <{1}}

如果要按字母顺序对元素进行排序 - 请使用.FirstOrDefault()扩展方法:

.OrderBy()

请查看以下链接以获取更多信息:

LINQ: .NET Language-Integrated Query

101 LINQ Samples

LINQPad - Handy utility for learning LINQ