2009-05-29 9 views
0

Je cherche un moyen de générer une combinaison différente de 4 ensembles de manière à ce que chaque élément de l'ensemble ait une place fixe dans la combinaison finale: Pour mieux expliquer mes besoins, permettez-moi de donner échantillon de ces 4 séries et enfin ce que je cherche:Fixed Place Permutation/Combination

Set # 1 (rue pré direction) {N, S} Set # 2 (nom de rue) {Frankford, Baily} Set # 3 (type de rue) {Ave, St} Ensemble # 4 (Direction de la poste) {S}

Permettez-moi d'énumérer quelques combinaisons attendues:
N Baily Ave S
S Frankford St S
S Baily Av S
.
.
.

Maintenant que vous pouvez voir que chaque l'élément de jeu tombe dans sa place
Direction Pre est en place 1
Nom de la rue est en place 2
Streety type est en place 3
Street est en place 4

Je cherche le moyen le plus efficace d'effectuer cette tâche, Une façon de le faire est de travailler à 2 séries à la fois comme:
Faire combinaison de Set 1 et Set 2 -> créer un nouvel ensemble 5 de combinaisons résultantes
Rassemble Set 5 et Set 3 -> créer une nouvelle série 6 de combinaisons résultant
Rassemble Set 6 et Set 4 -> Cela me donnera les combinaisons finales

Y at-il une meilleure façon de faire cette chose? Aide aimablement. Je vais préférer C# ou Java.

Merci

Répondre

0

@ David B si la liste des predirections est vide, est-il un moyen que nous obtenons encore les combinaisons puisque par votre façon aucun produit cartésien sera retourné.


David B ici:

var query = 
    from d in predirections.DefaultIfEmpty() 
    from n in names.DefaultIfEmpty() 
    from t in types.DefaultIfEmpty() 
    from s in postdirections.DefaultIfEmpty() 
    select new {d, n, t, s}; 
1

On dirait que vous êtes à la recherche du produit cartésien de certains jeux. Vous pouvez le faire en utilisant des boucles imbriquées. Voici le code Haskell, que vous n'avez pas demandé.

Prelude> [[x,y] | x <- ['1'..'3'], y <- ['A'..'C']] 
["1A","1B","1C","2A","2B","2C","3A","3B","3C"] 
2

Voici quelques linq (C#) qui vous donne toutes les combinaisons, ce n'est pas "le moyen le plus efficace".

var query = 
    from d in predirections 
    from n in names 
    from t in types 
    from s in postdirections 
    select new {d, n, t, s};