如何通过Name(或value)而不是Index在数组中查找项的值

本文关键字:数组 Index 查找 Name 何通过 value | 更新日期: 2023-09-27 18:21:06

如何通过Name(或value)而不是Index在数组中查找项的值
例如;获取名称,其中ID = 1

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

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

Index, _itemID, _price, NamesIDs []

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

Index, _ itemID, _name

我没有构建这个东西,所以请原谅我的疯狂,但父数组有项目ID和价格,子数组有系统中所有项目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时,我如何获得Name,而不是通过索引提取它?如果我按索引提取它,我必须遍历子数组中的每个项并进行比较。我不介意迭代,但我认为必须有一种更简单的方法。

我想做一些类似的事情:

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

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

这个练习的重点是按字母顺序对父数组进行排序,而不是按数字(.sort())

谢谢大家!

如何通过Name(或value)而不是Index在数组中查找项的值

尝试使用LINQ:

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

如果您有多个具有相同ID的项目,您应该致电.ToList()而不是.FirstOrDefault()

如果您想按字母表对元素进行排序,请使用.OrderBy()扩展方法:

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

查看以下链接了解更多信息:

LINQ:.NET语言集成查询

101 LINQ样本

LINQPad-学习LINQ 的实用工具