2016-06-23 14 views
4

ich ein Zellenfeld von numerischen Strings haben zB:In MATLAB wie füge ich eine Zeichenfolge am Anfang jeder Zeichenfolge in einem Zellenfeld ein?

labels = {'1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'} 

Ich versuche, ohne jede Art von Schleife eine Zeichenfolge ('Label ') zu Beginn jedes Array-Element hinzuzufügen, wie das Array ist massiv und Ich brauche den Code, um schnell zu laufen. Meine andere Voraussetzung ist das Leerzeichen, nachdem das Wort 'Label' beibehalten werden muss, sobald ich es auf die zweistelligen Elemente im Array anwende. Das Ergebnis, das ich will, ist:

fullLabels = {'Label 1', 'Label 2', 'Label 3', 'Label 4', 'Label 5', 
       'Label 6', 'Label 7', 'Label 8', 'Label 9', 'Label 10', 
       'Label 11', 'Label 12'} 

Ich versuchte strcat() wie folgt aus:

fullLabels = strcat('Label ', labels); 

Das ist in Ordnung für den einstelligen Array-Elemente, aber wenn es an den Array-Elementen zweistelligen angewendet ist der Raum nach 'Label' entfernt, um:

fullLabels = {..., 'Label10', 'Label11', 'Label12'} 

Antwort

2

strcat Borte Leerzeichen aus allen Eingängen vor der Verkettung nachlauf. Sie möchten die Zeichenfolgen manuell verketten, indem Sie [] verwenden.

fullLabels = cellfun(@(x)['Label ', x], labels, 'UniformOutput', false) 

% 'Label 1' 
% 'Label 2' 
% 'Label 3' 
% 'Label 4' 
% 'Label 5' 
% 'Label 6' 
% 'Label 7' 
% 'Label 8' 
% 'Label 9' 
% 'Label 10' 
% 'Label 11' 
% 'Label 12' 

Man könnte auch so etwas wie regexprep nutzen das Label vorangestellt wird. Dies ersetzt das erste Zeichen jedes Etiketts mit sich selbst (\1) mit 'Label ' an der Vorderseite.

fullLabels = regexprep(labels, '^.', 'Label \1') 

aktualisieren

@ Dev-ils Antwort erwähnt ein Zellenfeld mit einem Raum zu strcat passieren, die ich nicht bewusst war. Statt den Raum zu verketten, könnten wir auch einfach die Zelle 'Label 'innerhalb stecken.

strcat({'Label '}, labels) 
+0

Perfekt! Danke @Suever. Ich werde beides mit meinen Daten versuchen und am schnellsten gehen. Ich vermute, der Zeitunterschied wird sowieso vernachlässigbar sein. – humbleHacker

2

Da strcat entfernt nur nachstehende Leerzeichen, wenn Sie Ihre Nummer Strings bekommen verwalten mit einem Raum zu beginnen (mit den Einstellungen von was auch immer ihr von „richtigen Zahlen“ konvertiert), werden Sie dieses Problem nicht sehen :

labels = {' 1', ' 2', ' 3', ' 4', ' 5', ' 6', ' 7', ' 8', ' 9', ' 10', ' 11', ' 12'}; 
fullLabels = strcat('Label',labels); 

Alternativ kann, wie here erwähnt, können Sie "täuschen" strcat durch den Raum mit einer Zelle umgibt:

fullLabels = strcat('Label', {' '}, labels); 
+0

Ich würde sagen, der erste Teil dieser Antwort ist nicht wirklich vollständig, da es keine Möglichkeit bietet, die Räume an Ort und Stelle zu bringen. Aber ich denke, die zweite Option ist die beste Lösung. –

+0

@DennisJaheruddin - über die erste Lösung: Es gibt verschiedene Möglichkeiten, einen Vektor von Zahlen in ein Zellenarray von Strings mit dem von Ihnen benötigten Format zu konvertieren (hauptsächlich 'sprintf' und' num2str'), aber da dies nicht der Fokus der Frage, ich habe es nur als eine Möglichkeit aufgezeigt (natürlich zu verwenden, wenn zutreffend). –

+0

@ Dev-iL Wusste nicht, dass du das kannst (+1). Darauf aufbauend habe ich ein Update zu meiner Antwort gepostet, das einfach '{'Label'}' als erste Eingabe verwendet. Klug. – Suever

Verwandte Themen