TuttoCAD Forum

TuttoCAD Forum
[ Home | Registrati | Discussioni Attive | Discussioni Recenti | Segnalibro | Msg privati | Sondaggi Attivi | Utenti | Album Fotografico | Download | | Cerca | FAQ ]
Nome Utente:
Password:
Salva Password
Password Dimenticata?

 Tutti i Forum
 1 - TuttoCAD Software
 AutoCAD
 Merge+sort di una lista di liste

Nota: Devi essere registrato per poter inserire un messaggio.
Per registrarti, clicca qui. La Registrazione è semplice e gratuita!

Larghezza finestra:
Nome Utente:
Password:
Modo:
Formato: GrassettoCorsivoSottolineatoBarrato Aggiungi Spoiler Allinea a  SinistraCentraAllinea a Destra Riga Orizzontale Inserisci linkInserisci EmailInserisci FlashInserisci Immagine Inserisci CodiceInserisci CitazioneInserisci Lista
   
Icona Messaggio:              
             
Messaggio:

  * Il codice HTML è OFF
* Il Codice Forum è ON

Faccine
Felice [:)] Davvero Felice [:D] Caldo [8D] Imbarazzato [:I]
Goloso [:P] Diavoletto [):] Occhiolino [;)] Clown [:o)]
Occhio Nero [B)] Palla Otto [8] Infelice [:(] Compiaciuto [8)]
Scioccato [:0] Arrabbiato [:(!] Morto [xx(] Assonnato [|)]
Bacio [:X] Approvazione [^] Disapprovazione [V] Domanda [?]
Seleziona altre faccine

    
 
   

V I S U A L I Z Z A    D I S C U S S I O N E
joseph Inserito il - 19 febbraio 2012 : 17:02:30
Studiando, in rete, alcuni esempi di merge (concatenazione) e sort (ordinamento) di liste, p.es. List2Lst di Alan J. Thompson e mg.lsp di Claudio Piccini su www.cg-cad.com, ho preso spunto per queste righe di codice, che offre una semplice soluzione alternativa.

Esso permette di fondere un insieme di liste in una lista unica e ordinare gli elementi secondo un criterio; le liste possono avere lunghezza variabile.
E' la funzione contraria a quella che spezza una lista in tante liste di lunghezza costante (in ingl. SPLIT).


(setq lst '((2 4) (3 8) (5 1) (4 0 7) (0 5)));lista di liste

(defun LL2L (lst / ret)
(while (/= (car lst) (cadr lst))
(setq ret (append ret (car lst) )
lst (cdr lst))
)
(setq ret1 (vl-sort-i ret '<))
(setq ret2 (mapcar '(lambda (x) (nth x ret)) ret1))
)

Se la lista-unione non contiene elementi doppi, è
sufficiente sostituire alle ultime 2 righe la seguente:
(setq ret1 (vl-sort ret '<)).

Sarebbe interessante conoscere se ci sono altri metodi per raggiungere lo stesso scopo, oltre quelli citati.
3   U L T I M E    R I S P O S T E    (in alto le più recenti)
Terminator Inserito il - 19 febbraio 2012 : 21:40:36
Secondo la mia modesta opinione tutto può essere didattico. In questo caso è semplicemente un'evoluzione della stessa funzione usando altri comandi, tutto qui.
joseph Inserito il - 19 febbraio 2012 : 20:56:43
OK!
La mia versione ha una veste semplicemente didattica (questa abitudine non riesco a scrollarmela di dosso), la tua, invece, ha una veste professionale.
Saluti.
Terminator Inserito il - 19 febbraio 2012 : 20:45:12
Beh, così posso essere più stringato:

(setq lst '((2 4) (3 8) (5 1) (4 0 7) (0 5))) ;lista di liste

(defun LL2L (lst / ret)
 (setq ret(apply 'append lst)
       ret (mapcar '(lambda (x) (nth x ret)) (vl-sort-i ret '<))
 )
)

TuttoCAD Forum © 2001-2010 CADLandia Torna all'inizio della Pagina
Pagina generata in 0,48 secondi.