Przeszukiwanie 3 list jedną pętlą

0

Witajcie, mam pewne pytanie.

Założmy, że mamy trzy listy - jedna typu String, druga int, a trzecia Double. W każdej liście znajdują się po 3 elementy.

List<int> values= new List<int>();
values.Add(2);
values.Add(1);
values.Add(5);

List<string> cities = new List<string>();
cities.Add("New York");
cities.Add("Mumbai");
cities.Add("Berlin");


List<double> values2 = new List<double>();
values2.Add(2.5);
values2.Add(3.7);
values2.Add(4.8);

I teraz gwódź programu - Mamy klasę :

  public class Mix
    {
        int val;
        String city;
        double val2;

        public Mix(int _val, String _city, double _val2)
        {
            this.val = _val;
            this.city = _city;
            this.val2 = _val2;
        }


    }

Chciałbym osiągnąć taki efekt by przeszukując wyżej zadeklarowane listy otrzymać wszystkie możliwe kombinacje obiektu Mix, czyli np:

2 New York 2.5
1 New York 3.7
5 New York 4.8

2 Mumbai 2.5
1 Mumbai 3.7
5 Mumbai 4.8

itd - po prostu wszystkie możliwe kombinację z tych trzech list. Jak mogłaby wyglądać taka pętla , która przeszukuje wszystkie elementy z trzech list i tworzy wszystkie możliwe kombinacje obiektów? W przypadku trzech list po 3 elementy powinno być 27 takich kombinacji. Wiadomo, że te kombinację mogę rozpisać na sztywno bo jest ich tylko 27, ale nie potrafię znaleźć rozwiązania optymalnego - niezależnego od ilości elementów w tych trzech listach. (Zakładam, że listy zawsze będą 3, może być tylko dodawana lub zmniejszana ilość elementów).

Z góry dzięki za odpowiedzi.

2
foreach(var mix in from v in values from c in cities from v2 in values2 select new Mix(v, c, v2)) 
{	
}

nie zapomnij o using System.Linq;

0

Dzięki wielkie, dokładnie o to mi chodziło! :) Pozdrawiam!

0

Alternatywnie można:

var values = new List<int> { 2, 1, 5 };
var cities = new List<string> { "New York", "Mumbai", "Berlin" };
var values2 = new List<double> { 2.5, 3.7, 4.8 };

var result = values.SelectMany(v=> cities.SelectMany(c => values2.Select(v2 => new Mix(v, c, v2))));

P.S. Rozumiem jeszcze rozpoczynanie pól klasy podkreślnikiem, ale w argumentach metody wygląda to dziwnie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1