Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在另一个列表中的列表中查找项目?_C#_.net_List_Collections - Fatal编程技术网

C# 在另一个列表中的列表中查找项目?

C# 在另一个列表中的列表中查找项目?,c#,.net,list,collections,C#,.net,List,Collections,好的,假设我有一个列表。每辆车还包含一个列表。每个零件都有一个与其关联的ID。我只获得了ID给零件,我想找到包含该零件的汽车。找到这辆车的最佳方法是什么?怎么样: foreach(Car car in listOfCars) { if (car.parts.Contains(partID)) { return car; } } Edit2:啊,我误解了,以为你的车上有一张党派名单 所以,在这种情况下 foreach(Car car in listOfCa

好的,假设我有一个
列表
。每辆车还包含一个
列表
。每个零件都有一个与其关联的
ID
。我只获得了
ID
零件
,我想找到包含该
零件的
汽车
。找到这辆车的最佳方法是什么?

怎么样:

foreach(Car car in listOfCars)
{
    if (car.parts.Contains(partID))
    {
        return car;
    }
}
Edit2:啊,我误解了,以为你的车上有一张党派名单

所以,在这种情况下

foreach(Car car in listOfCars)
{
    foreach(Part part in car.parts)
    {
        if (part.id == partId)
        {
            return car;
        }
    }
}
Edit1:根据您的用例,维护一个从零件ID映射到汽车的“索引”可能也有意义。比如:

var partIDToCar = Dictionary<string, Car>();
然后,这是一个快速检查,以获得汽车:

if (partIDToCar.ContainsKey(partID))
{
    return partIDToCar[partID];
}
var部分;
foreach(列表中的var部分)
{
如果(part.id=id)
零件=零件;
}
foreach(列表中的var车辆)
{
如果(car.Part=零件)
返回车;
}
var id=123;
var cars=新列表();
var theCar=汽车。单人(
汽车=>汽车零部件
.FirstOrDefault(part=>part.Id==Id)!=null
);

您可以执行如下LINQ查询:

// List<car> cars;
int id = 101;
var result = Cars.Where (c => c.parts.Where (p => p.ID == id).Any ());
//列出汽车;
int id=101;
var result=Cars.Where(c=>c.parts.Where(p=>p.ID==ID.Any());
用LINQ怎么样

List<Car> cars = ...
var carToFind = cars.FirstOrDefault(car => car.Parts.Any(part => part.Id == idToFind));
列出汽车=。。。
var carToFind=cars.FirstOrDefault(car=>car.Parts.Any(part=>part.Id==idToFind));
在英语中:“查找第一辆车(如果没有这样的车,则为null),该车的任何部件的Id与所需Id匹配。”

在查找中查找

List<car> cars = new List<Car>();
List<car> carWithParts = cars.Find(x => x.parts.Any(y => y.PartID=123));
List cars=new List();
列出carWithParts=cars.Find(x=>x.parts.Any(y=>y.PartID=123));

如果多辆车可能包含同一个PartID,则此操作有效。

是否要查找第一辆车或所有包含该部件的车?@Nogwater所有车的每个部件都有一个唯一的标识符,因此只有一辆车包含该部件。不幸的是,我无法直接访问部件-我必须遍历车辆。如果存在,则会引发异常发现不止一辆车。您可能希望删除单个()调用。此外,Contains在这种情况下也不起作用(除非您实现了自己的版本)。@Guvante此处的错误是“无法解析方法Contains(int)”,候选项是Contains(part)。part是一个对象,您正在将int传递给Contains。您应该创建和分割Id,并使用IdToSearch分配Id。但我不确定是否包含比较所有属性,也不知道每个属性有多少个Part@jsmith:这是故意的,“每个零件在所有汽车上都有一个唯一的标识符,因此只有一辆汽车带有该零件”,如果设计要求唯一,没有理由对其含糊不清。@proseidon:对不起,出于某种原因,我以为您正在存储部件ID。不幸的是,这不起作用。Contains期望类型部件而不是部件中的属性。我也在想同样的事情,然后做了
ToArray()
,因为我想不起使用
任何
// List<car> cars;
int id = 101;
var result = Cars.Where (c => c.parts.Where (p => p.ID == id).Any ());
List<Car> cars = ...
var carToFind = cars.FirstOrDefault(car => car.Parts.Any(part => part.Id == idToFind));
List<car> cars = new List<Car>();
List<car> carWithParts = cars.Find(x => x.parts.Any(y => y.PartID=123));