Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Συνδεδεμένες Λίστες και C#

Îåêßíçóå áðü ôï ìÝëïò pontifikas. Τελευταία δημοσίευση από το μέλος rousso στις 06-09-2005, 12:43. Υπάρχουν 8 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  06-09-2005, 10:45 5098

    Συνδεδεμένες Λίστες και C#

    Θέλω να φτοιάξω κάτι σαν "Ευρετήριο" πινάκων(ArrayLists). Έναν πίνακα πάλι δηλαδή που κάθε του στοιχείο θα είναι κάτι σαν δείκτης προς το κατάλληλο ArrayList δεδομένων. Τα arraylists των δεδομένων μου θέλω να δημιουργούνται και να σβήνονται δυναμικά οπότε και θα ενημερώνεται και ο πινακας-ευρετήριο.

    Η πρώτη μου σκέψη ήταν μια συνδεδεμένη λίστα, αλλά η C# δεν υποστηρίζει pointers και δεν μπορώ μέσω unsafe code Να περάσω pointer σε managed type όπως το arraylist.
    Μπορώ φυσικά να δημιουργήσω, ας πούμε, ένα sorted List όπου θα αποθηκεύω το κλειδί(κριτήριο ομαδοποίησης) μου και τους πίνακες των δεδομένων μου...
    Αλλά δεν ξέρω ρε παιδιάEmbarrassed [:$] . Δεν μου φαίνεται καλή ιδέα. Πίνακα μέσα σε πίνακα... Μήπως διπλασιάσω τον χώρο που καταλαμβάνουν τα δεδομένα μου φοβάμαι.
    Ή μήπως θα περάσει με αναφορά ο πίνακας?

    Καμοιά ιδέα?
    Ευχαριστώ.

  •  06-09-2005, 10:59 5100 σε απάντηση της 5098

    Απ: Συνδεδεμένες Λίστες και C#

    Αν δεν κάνω λάθος - και πιστεύω οτι δεν κάνω :) - όλα τα non-primitive types περνάνε by reference στο ArrayList ... οπότε μπορείς να μην ανησυχείς για pointers κτλ κτλ

    Επίσης αν δεν κάνω λάθος, στο PowerCollections πακετάκι (open source), περιέχεται κι ένα collection όπου τα στοιχεία του είναι κι αυτά collections, αλλά αυτή τη στιγμή δεν θυμάμαι το link, οπότε επιφυλλάσομαι ;)

    Πολύ καλή μέρα μας
    Angel
    O:]
  •  06-09-2005, 11:11 5102 σε απάντηση της 5100

    Απ: Συνδεδεμένες Λίστες και C#

    Συγνώμμη, άκυρο. Μέσα στο PowerCollections δεν περιέχεται τέτοιο type. Μάλλον το θυμάμαι απ'το αντίστοιχο της Java. Πάντως η ιδέα δεν είναι κακή, ούτε πιστεύω οτι θα σου δημιουργήσει προβλήματα.
    Angel
    O:]
  •  06-09-2005, 11:31 5104 σε απάντηση της 5102

    Απ: Συνδεδεμένες Λίστες και C#

    Ευχαριστώ πολύ. Θα το βάλω μπρός. Ελπίζω να έχεις δίκαιο.
    Και να μην έχεις..... έχουμε RAM μωρέ.....Stick out tongue [:P]
  •  06-09-2005, 11:46 5106 σε απάντηση της 5104

    Απ: Συνδεδεμένες Λίστες και C#

    Ο anjelinio έχει δίκιο. Το array περιέχει οποιοδήποτε άλλο αντικείμενο σαν object reference, οπότε μπορεί να δεχθεί και άλλο array. Έτσι θα δημιουργήσεις ένα jagged array. Αν θέλεις να έχεις περισσότερες δυνατότητες, μπορείς αντί για array να χρησιμοποιήσεις κάποιο άλλο collection, hashtable, ό,τι θέλεις. Linked lists κάπου θα βρεις ψάχνοντας στο google, αν πραγματικά τα χρειάζεσαι.

    Όσον αφορά τη μνήμη, ισχύει ότι ισχύει πάντα με το garbage collection. Όταν ελευθερωθούν τα references σε ένα αντικείμενο, αυτό θα καταστραφεί. Δεν υπάρχει λόγος να ψάχνεις για pointers. Γενικά, ισχύει ό,τι και με τη Java ή τις βιβλιοθήκες garbage collection στη C++. Αν σε βοηθάει, σκέψου τα references σαν ... C++ references αντί για pointers.
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  06-09-2005, 11:58 5108 σε απάντηση της 5100

    Απ: Συνδεδεμένες Λίστες και C#

     anjelinio wrote:
    Αν δεν κάνω λάθος - και πιστεύω οτι δεν κάνω :) - όλα τα non-primitive types περνάνε by reference στο ArrayList ... οπότε μπορείς να μην ανησυχείς για pointers κτλ κτλ

    Με όλο το σεβασμό, παρακαλώ επιτρέψτε μου μια διόρθωση (αν και το παραπάνω νόημα είναι πάνω κάτω σωστό)...

    Δεν είναι (ή λέγονται) non-primitive types...

    Υπάρχουν δύο είδη τύπων δεδομένων στην C#: value types και reference types... Τα reference types είναι ότι προκύπτει από classes, interfaces και delegates + ότι είναι object ή string... Value types είναι όλοι οι τύποι αριθμητικών (int, byte, char, float κλπ), τα enums, τα bool και ότι είναι struct... Για λεπτομέρειες δες: εδώ, εδώ και εδώ...

    Τα reference types λοιπόν αποθηκεύουν references στα actual data...

    Οπότε pontifikas δεν υπάρχει λόγος να "φοβάσαι" την μη ύπαρξη pointers στην C#. Τα reference types είναι κάτι σαν managed pointers...
    (Παρένθεση: υπάρχουν και pointer types όπως ξέρεις αλλά μόνο αν χρησιμοποιήσεις το unsafe keyword).

    Στο θέμα μας τώρα...

    Φτιάξε το όπως θέλεις.

    Εγώ θα έφτιαχνα ένα collection χρησιμοποιόντας το System.Collections.Specialized.NameObjectCollactionBase.

    φιλικά
    rousso


    rousso
  •  06-09-2005, 12:04 5109 σε απάντηση της 5098

    Απ: Συνδεδεμένες Λίστες και C#

    Παιδιά ευχαριστώ πολύ για την βοήθεια και τις γνώσειςBig Smile [:D].Όσο γερνάτε μαθαίνω Stick out tongue [:P]
  •  06-09-2005, 12:18 5112 σε απάντηση της 5108

    Απ: Συνδεδεμένες Λίστες και C#

    Μια και το γυρίσαμε στη γλωσσολογία ...

    Η VB.NET χρησιμοποιεί την έννοια primitive types (παρ. 7.3 του VB.NET Language reference) για να δώσει ονόματα στους built-in τύπους. "The primitive types are identified through keywords, which are aliases for predefined types in the System namespace". Η C# δεν κάνει τέτοιο διαχωρισμό. Σαν primitive type η VB.NET ορίζει και το Boolean και το String οπότε η έννοια primitive δεν έχει σχέση με value/reference types, ή με τα primitives της Java.

    Θα μου πεις, καλά, γιατί δεν τους ονομάζανε built-in types? Μάλλον για να μας κάνουν τη ζωή ενδιαφέρουσα.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  06-09-2005, 12:43 5116 σε απάντηση της 5112

    Απ: Συνδεδεμένες Λίστες και C#

    Ευχαριστώ πολύ Παναγιώτη. Η αλήθεια είναι ότι δεν ήξερα τι λέει η VB.NET στο language reference μια και δεν έχω ασχοληθεί με VB.NET programming και για επιμορφωτικούς και μόνο λόγους θα κάτσω να διαβάσω τα σχετικά sections με την ευκαιρία.

    Όμως το θέμα μας δεν παύει να είναι σε C# οπότε και έλαβα κι εγώ το ερέθισμα της διευκρινιστικής απάντησης..

    Υποθέτω ότι δεν ονομάστηκαν built-in types γιατί απλά είναι άλλο πράγμα τα built-in types και άλλο πράγμα (subset του πρώτου) τα primitive types...


    Σε κάθε περίπτωση το θέμα των τύπων είναι θέμα της γλώσσας (compiller). Ο κάθε compiller αντιστοιχεί τους τύπους δεδομένων της γλώσσας σε εκείνους του CLI. Οπότε είναι λογικό να μπορούν να υπάρχουν διαφορετκές προσεγγίσεις σε κάθε γλώσσα.

    with all due respect
    rousso
    rousso
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems