OK, sono sicuro che qualcuno, da qualche parte, deve aver escogitato un algoritmo per questo già, quindi ho pensato di chiedere prima di andare a (re) inventarlo io stesso.Ellissi un insieme di nomi
Ho una lista di stringhe di testo non vuote arbitrarie (immesse dall'utente). Ogni stringa può essere di qualsiasi lunghezza (tranne 0) e sono tutte uniche. Voglio visualizzarli all'utente, ma voglio ridurli a una lunghezza fissa che decido e sostituirne una parte con un'ellissi (...). Il problema è che voglio che tutte le stringhe di output siano uniche.
Per esempio, se ho le stringhe:
- Microsoft Internet Explorer 6
- Microsoft Internet Explorer 7
- Microsoft Internet Explorer 8
- Mozilla Firefox 3
- Mozilla Firefox 4
- Google Chrome 14
quindi non vorrei tagliare le estremità delle stringhe, perché questa è la parte unica (non voglio visualizzare "Microsoft Internet ..." 3 volte), ma è OK tagliare la parte centrale:
- Microsoft ... rer 6
- Microsoft ... rer 7
- Microsoft ... rer 8
- Mozilla Firefox 3
- Mozilla Firefox 4
- Google Chrome 14
Altre volte, la parte centrale potrebbe essere unico, e che avrei voluto tagliare l'estremità:
- Verbale riunione aziendale, 2010/05/25 - Solo per uso interno
- verbale di riunione aziendale, 2010/06/24 - uso interno
- verbale riunione aziendale, 7/23/2010 - solo per uso interno
potrebbe diventare:
- Verbale riunione aziendale, 2010/05/25 ...
- Verbale riunione aziendale, 2010/06/24 ...
- Verbale riunione aziendale, 7/23/2010 ...
Credo che dovrebbe probabilmente mai ellipsize il molto inizio delle corde, anche se che altrimenti sarebbero ammessi, dal momento che sarebbe guardare strano. E immagino che potrebbe ellissi più di un punto nella stringa, ma entro la ragione - forse 2 volte sarebbe OK, ma 3 o più sembra eccessivo. O forse il numero di volte non è importante quanto le dimensioni dei pezzi che rimangono: meno di circa 5 caratteri tra le ellissi sarebbe piuttosto inutile.
Gli ingressi (sia il numero che la dimensione) non saranno eccessivamente grandi, quindi le prestazioni non sono una preoccupazione importante (beh, a patto che l'algoritmo non provi qualcosa di sciocco come enumerare tutte le possibili stringhe finché non trova un set che funzioni!).
Immagino che questi requisiti sembrino piuttosto specifici, ma in realtà sono abbastanza indulgente - sto solo cercando di descrivere quello che ho in mente.
Qualcosa di simile è stato fatto prima? C'è qualche algoritmo o libreria esistente che fa questo? Ne ho cercato su google ma non ho trovato nulla di simile fino ad ora (ma forse sono solo cattivo con Google). Devo credere che qualcuno da qualche parte abbia voluto risolvere questo problema già!
Hmm, non è un brutto punto di partenza, ma non penso che sia proprio quello che volevo. Forse i miei esempi non sono stati scelti per chiarire questo concetto, ma non ho bisogno che le ellissi sostituiscano solo sottostringhe uguali: solo che le stringhe di output sono uniche. Ad esempio, se dati i due input "Herzkreislaufwiederbelebung" e "Geschwindigkeitsbegrenzung", e volevo tagliare a lunghezza = 12 (compresi i punti), sarebbe opportuno restituire "Herzkreis ..." e "Geschwind ...". – Ken
@Ken Sembra che tu possa semplicemente farli a pezzi. – Orbling
@Ken - Giusto, i tuoi esempi erano chiari ma immagino che il mio pensiero fosse un po 'confuso. Sono uscito fuori pista cercando di trovare degli esempi che non potevano essere abbreviati abbastanza e conservano ancora l'unicità. – erickson