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

时间:2012-07-27 17:00:07

标签: c# .net list collections

好的,我们假设我有List<car>。每辆车还包含List<part>。每个部分都有ID与之关联。我只给ID part,我想找到包含car的{​​{1}}。查找此part的最佳方式是什么?

6 个答案:

答案 0 :(得分:9)

使用LINQ怎么样?

List<Car> cars = ...
var carToFind = cars.FirstOrDefault(car => car.Parts.Any(part => part.Id == idToFind));

英文:“找到第一辆车(如果没有这样的车,则为null),其中任何部件的Id都与所需的Id匹配。”

答案 1 :(得分:4)

var id = 123;
var cars = new List<Car>();
var theCar = cars.Single(
          car => car.parts
                    .FirstOrDefault(part => part.Id == id) != null
          );

答案 2 :(得分:2)

您可以像这样执行LINQ查询:

// List<car> cars;
int id = 101;
var result = Cars.Where (c => c.parts.Where (p => p.ID == id).Any ());

答案 3 :(得分:1)

怎么样:

foreach(Car car in listOfCars)
{
    if (car.parts.Contains(partID))
    {
        return car;
    }
}

编辑2:啊,我误解了,并且认为你的车有一份partID列表。

所以,在那种情况下......

foreach(Car car in listOfCars)
{
    foreach(Part part in car.parts)
    {
        if (part.id == partId)
        {
            return car;
        }
    }
}

编辑1:根据您的使用情况,维护从部件ID映射到汽车的“索引”也可能有意义。类似的东西:

var partIDToCar = Dictionary<string, Car>();

当您在汽车中放置零件时,您需要更新索引:

partIDToCar[partID] = car;

然后,这是一个快速检查以获得汽车:

if (partIDToCar.ContainsKey(partID))
{
    return partIDToCar[partID];
}

答案 4 :(得分:1)

在查找

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

如果多辆汽车可以包含相同的PartID,这将有效。

答案 5 :(得分:0)

 var thePart;

 foreach (var part in list<parts>)
 {
 if (part.id = ID)
 thePart = part;
 }

 foreach (var car in list<cars>)
 {
 if (car.Part = thePart)
 return car;
 }