Lambda expression for looping through two parallel dictionaries

I am trying to iterate over two parallel dictionaries, as in the code below, but instead I want to use a lambda expression

foreach (var s in sb_eventdata)
{  
    foreach (var f in final_data)
    {
        if (s.Value.Car.Equals(f.Value.Car))
        {
            Console.Writeline("Found!");
        }
    }
}

var values = sb_eventdata.Where(k => k.Value.Hometeam.Contains( ???? );

I'm really not sure what to pass to contains, I am assuming another lambda expression, but what?

+4
source share
5 answers

The closest linq expression for your loops would be:

var sb_eventdata = new Dictionary<string, string>{ {"a", "a"}, {"b", "b"}};
var final_data = new Dictionary<string, string>{{"a", "a"}, {"b", "b"}, {"c","c"}};

var result = 
    // first loop
    sb_eventdata.Select(s => 
        // second loop
        final_data.Where(f => s.Value.Equals(f.Value)))
    // flatten results (returns results from the first dictionary)
    .SelectMany(x => x);
+1
source

You can use the linq functionIntersect to find items in a list. Then display all related items.

    var foo = sb_eventdata.Select(o => o.Value.Car).Intersect(final_data.Select(o => o.Value.Car));
    foreach (var item in foo)
    {

        Console.Writeline("Found!");

    }
+1
source

sb_eventdata.ForEach(d1 => 
                final_data.Where(d2 => d1.Value.Car.Equals(d2.Value.Car))
                          .ToList()
                          .ForEach(r => Console.WriteLine("Found!")));
0

, - Join().

LinqPad:

void Main()
{
    var a = new[] {
        new Car("Opel",200),
        new Car("Volkswagen",300),
        new Car("Audi", 500)
    };

    var b = new[] {
        new Car("Peugeot", 180),
        new Car("Seat", 300),
        new Car("Volvo", 480)
    };

    var c = a.Join(b, ak => ak.Value, bk => bk.Value, (ak,bk) => new {A=ak.Name,B=bk.Name,ak.Value});
    c.Dump();
}

// Define other methods and classes here

class Car {
    public string Name;
    public int Value;

    public Car (string name, int value) {
      Name = name;
      Value = value;
    }
}
0

, , Any:

if(sb_eventdata.Any(s => 
    final_data.Any(f => s.Value.Car.Equals(f.Value.Car))))
         Console.WriteLine("Found!");

:

if(sb_eventdata.Any(s => final_data.ContainsValue(s.Value)))
         Console.WriteLine("Found!");

, sb_eventdata final_data:

sb_eventdata.Where(s => final_data.ContainsValue(s.Value)).Count();
0
source

Source: https://habr.com/ru/post/1611483/


All Articles