Verschmelzen Sie zwei Arrays mit alternierenden Werten

8

Ich möchte 2 Arrays mit einer anderen Länge zusammenführen:

%Vor%

Was ist der beste Weg, das zu tun?

Bearbeiten: Das Ergebnis, das ich erwarten würde, ist ["a", 1 ,"b", 2, "c", "d"]

    
Fargho 01.11.2017, 18:10
quelle

3 Antworten

7

Sie könnten die Mindestlänge beider Arrays iterieren und alternative Elemente erstellen und am Ende den Rest drücken.

%Vor%

Lösung für eine beliebige Anzahl von Arrays mit einem Transponierungsalgorithmus und späterem Reduzieren.

%Vor%
    
Nina Scholz 01.11.2017, 18:23
quelle
5

Erstellen Sie ein Tupel-Array. Jedes Tupel enthält 1 Element aus jedem Array, flacht durch Ausbreiten des Tupelarrays ab und fügt die übrig gebliebenen Elemente aus den Arrays hinzu:

%Vor%
    
Ori Drori 01.11.2017 18:20
quelle
4

Hier ist ein anderer Weg, wie Sie es mit der Destrukturierungsaufgabe machen können

%Vor%

Und hier benutzt es einen richtigen Tail Call

%Vor%

Und nochmal ohne Destrukturierungsaufgabe zu verwenden

%Vor%

Oder eine Kombination aus dem Tail-Call und Ihrem Index - dieser ist der schnellste im Vergleich zu anderen Snippets, die ich zur Verfügung gestellt habe, da er die wenigsten Zuweisungen, die wenigsten Zwischenwerte und daher weniger Garbage Collection nach der Berechnung erstellt - gewinnt / gewinnen / gewinnen

%Vor%

Der Interessierte wird bemerken, dass i und acc private APIs sind, die geleakt wurden - dies kann leicht mit Hilfe eines loop -Helfers behoben werden; Beachten Sie, dass diese Technik auch interleave stack-safe in einer Umgebung ohne Tail-Call-Optimierung macht

Im Vergleich zu oben erhalten wir also zwei mehr Gewinne, die diesen Gewinn / Gewinn / Gewinn / Gewinn / Gewinn machen

%Vor%
    
user633183 01.11.2017 18:45
quelle