2013-07-03 13 views

risposta

12

Primo passo, utilizzare un array di celle piuttosto che array di stringhe:

arr = {'hello', 'world'; 'hello', 'again'; 'I----', 'said-'; 'hello', 'again'}; 

In secondo luogo, uso unico per ottenere le stringhe univoche (questo non funziona su un array di stringhe, che è il motivo per cui suggerisco la cellula):

[unique_strings, ~, string_map]=unique(arr); 

modalità Quindi utilizzare sulla variabile string_map per trovare i valori più comuni:

most_common_string=unique_strings(mode(string_map)); 
+4

+1: ma non è necessario disporre di array di celle. Puoi usare 'unique (arr, 'rows')'. –

+0

Oh bene, grazie! Non li uso molto spesso, non conoscevo questa funzione. –

+0

Solo una nota sugli array di stringhe e il commento sopra: in questo caso, la stringa dovrebbe essere riformattata in modo che ogni stringa fosse una riga separata, invece di provare a disporre di due stringhe su una singola riga - funziona solo come una cella altrimenti Matlab considera l'intera linea una singola stringa concatenata, cioè l'iniziale 'arr' nella domanda è equivalente a' ['helloworld', 'helloagain';, 'I ---- said -'; 'helloagain'] ' –

-1

È preferibile utilizzare gli array di celle e la funzione regexp; il comportamento degli array di stringhe potrebbe non essere quello che ti aspetti.

arr = {'hello', 'world'; 'hello', 'again'; 'I----', 'said-'; 'hello', 'again'}; 

Se si utilizza

hellos = sum(~cellfun('isempty', regexp(arr, 'hello'))); 

verrà restituito il numero di 'hello' 's in array di celle arr.

+2

-1: la domanda riguarda la ricerca della stringa più frequente, non una stringa specifica predeterminata. –

+0

E anche se stavate cercando una stringa specifica, 'regexp' sarebbe un po 'eccessivo. 'strcmp' può essere usato per identificare stringhe uguali in un array di celle. – kwatford

Problemi correlati