Mit #inject verbinden Sie Zeichenfolgen aus einem Array

8

Ich gehe durch eine Online-Lektion , die normalerweise eine sehr einfache Ein-Zeilen-Lösung hat. Ein Problem besagt, dass angesichts des folgenden Arrays:

%Vor%

Ich muss #inject verwenden, um eine einzelne Zeichenfolge aller Namen zusammen mit einer Zeichenfolge zu erhalten, wobei jeder Name mit einem Anfangsbuchstaben versehen ist:

%Vor%

Obwohl dies leicht mit #map und #join durchgeführt werden könnte, erfordert diese spezielle Übung nur die Verwendung von #inject. Ich habe mir so etwas ausgedacht:

%Vor%

was mir geben würde:

%Vor%

wobei der Whitespace am Ende der Zeichenfolge nicht als die richtige Lösung übergeben wird.

  • Wie erreiche ich das ohne das Leerzeichen am Ende?
  • Ist dies der richtige Weg, um #inject zu verwenden und eine leere Zeichenfolge zu übergeben?
  • Mache ich die << richtig, um Strings zu kombinieren?
Darek Rossman 14.03.2012, 13:17
quelle

6 Antworten

7

Versuchen Sie Folgendes:

%Vor%

Ich glaube nicht, dass du mit inject aus dem extra Raum entkommen kannst. Sie müssen auch

tun %Vor%

BEARBEITEN: da die Anweisung geändert wurde, um Sie zu zwingen, Join und Map nicht zu verwenden, ist hier eine etwas hässliche Lösung mit inject:

%Vor%     
Ivaylo Strandjev 14.03.2012, 13:32
quelle
2
%Vor%     
megas 14.03.2012 13:26
quelle
1

Es gibt bessere Möglichkeiten als #inject , siehe die anderen Antworten. Aber wenn Sie darauf bestehen, könnten Sie nur String#rstrip das nachgestellte Leerzeichen.

Oder drehen Sie den Block um und prüfen Sie, ob das Memo leer ist, bevor Sie das Zeichen hinzufügen.

%Vor%

Ich bin mir nicht sicher über den Operator << . Ich würde + verwenden, aber das ist wahrscheinlich nur eine persönliche Vorliebe.

    
user1252434 14.03.2012 13:35
quelle
1

Das Überprüfen von " " in jeder Runde ist teurer als chop! letzte Ausgabe. Wenn Sie sich für << entscheiden, können Sie String-Verkettung anzeigen.

%Vor%     
Selman Ulug 14.03.2012 14:22
quelle
0

setzt x.inject {| memo, val | "# {memo} # {val.upcase}"}

    
Karol Rossa 12.08.2015 10:25
quelle
0

Benutze #inject nicht, es gibt bessere Wege das zu lösen:

%Vor%

Ihr erstes Ziel sollte immer sein, das Problem zu lösen. Sie könnten #inject verwenden, aber es ist einfach nicht die ideale oder sogar klare Lösung hier. Du hast bessere Dinge mit deiner Zeit zu tun, als herauszufinden, wie du #inject dazu bringst, dir die richtigen Ergebnisse zu geben.

    
harbichidian 14.03.2012 13:25
quelle

Tags und Links