Looking for an item in a list in another list?

Ok, so let's say I have it List<car>. Each car also contains List<part>. Each piece has a link to it ID. I am assigned IDto part, and I want to find carwhich one contains part. What is the best way to find this car?

+5
source share
6 answers

How is it with LINQ?

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

In English: "Find the first car (or zero if such a car does not exist) that has any part with an identifier corresponding to the desired identifier."

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

LINQ :

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

:

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

Edit2: , , partIDs.

, ...

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

Edit1: Depending on your use case, it may also make sense to maintain an β€œindex” that maps to part identifiers for cars. Sort of:

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

When you place parts in your cars, you update your index:

partIDToCar[partID] = car;

Then, this is a quick check to get the car:

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

Find inside Find

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

This will work if several cars can contain the same PartID.

+1
source
 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;
 }
0
source

All Articles