Frage

Ich suche nach einer Möglichkeit, in der ich eine andere Kombination von 4 Sets Elementen generieren kann, so dass das Element eines jeden Sets einen festen Platz in der endgültigen Kombination hat: Um meine Anforderung besser zu erklären bin auf der Suche nach:

Set#1 (Street Pre Direction) {N, S} Set#2 (Straßenname) {Frankford, Baily} Set#3 (Street Typ) {AVE, ST} Set#4 (Street Post Direction) {S}

Lassen Sie mich nur wenige erwartete Kombinationen auflisten:
N Baily Ave s
S Frankford st s
S baily av s
.
.
.

Nun, wie Sie sehen, dass das Element eines jeden Sets an seinen Platz fällt
Vorrichtung ist vorhanden 1
Straßenname ist vorhanden 2
Streety Typ ist vorhanden 3
Straßenbeschreibung ist vorhanden 4

Ich bin auf der Suche nach der effizientesten Möglichkeit, diese Aufgabe auszuführen. Eine Möglichkeit, dies zu tun, besteht darin, gleichzeitig in 2 Sätzen zu arbeiten:
Machen Sie eine Kombination aus Set 1 und Set 2 -> Erstellen Sie einen neuen Satz 5 der resultierenden Kombinationen
Machen Sie eine Kombination aus Set 5 und Set 3 -> Erstellen Sie einen neuen Satz 6 der resultierenden Kombinationen
Machen Sie eine Kombination aus Set 6 und Set 4 -> Dies gibt mir die endgültigen Kombinationen

Gibt es einen besten Weg, dies zu tun? Freundlich helfen. Ich werde C# oder Java bevorzugen.

Vielen Dank

War es hilfreich?

Lösung 3

@ David B Was ist, wenn die Liste der Vorzüge leer ist, es gibt eine Möglichkeit, die Kombinationen immer noch zu erhalten, da durch Ihren Weg kein kartesisches Produkt zurückgegeben wird.


David B hier:

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};

Andere Tipps

Hier ist einige Linq (C#), die Ihnen alle Kombinationen verleiht, es ist nicht "der effizienteste Weg".

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

Es hört sich so an, als würden Sie nach dem kartesischen Produkt einiger Sets suchen. Sie können es mit verschachtelten Schleifen tun. Hier ist der Haskell -Code, den Sie nicht gefragt haben.

Prelude> [[x,y] | x <- ['1'..'3'], y <- ['A'..'C']]
["1A","1B","1C","2A","2B","2C","3A","3B","3C"]
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top