Μετατρέψτε το C# LINQ σε Λεξικό

Metatrepste To C Linq Se Lexiko



Σε C# LINQ, δημιουργία λεξικού από System.Collections.Generic.IEαριθμήσιμο είναι δυνατή χρησιμοποιώντας τη μέθοδο ToDictionary(). Αυτή η μέθοδος δημιουργεί ένα λεξικό με από το δεδομένο . ο System.ArgumentNullException απορρίπτεται εάν η πηγή δεδομένων, ο keySelector ή το elementSelector είναι μηδενικός. Επίσης, εάν το keySelector παράγει διπλά κλειδιά για δύο στοιχεία, το System.ArgumentException πετιέται. Σε αυτόν τον οδηγό, θα συζητήσουμε πώς να δημιουργήσετε ένα λεξικό από την πηγή δεδομένων λίστας υπερφορτώνοντας δύο μεθόδους.

Σύνταξη:

1. Εάν θέλετε να δημιουργήσετε ένα λεξικό σύμφωνα με τις καθορισμένες λειτουργίες επιλογέα κλειδιού και στοιχείου από τη δεδομένη πηγή δεδομένων, υπερφορτώστε την ακόλουθη μέθοδο:









Παράμετροι:



    1. πηγή : Η πηγή μπορεί να είναι μια IEnumerable (λίστα) στην οποία το λεξικό δημιουργείται από αυτήν την πηγή.
    2. επιλογέας κλειδιού : Αυτή είναι μια συνάρτηση που χρησιμοποιείται για τη λήψη του κλειδιού από κάθε στοιχείο.
    3. Επιλογέας στοιχείων: Αυτή είναι μια συνάρτηση που χρησιμοποιείται για τη λήψη του στοιχείου.
    4. Πηγή TS : Αυτή είναι η παράμετρος τύπου που καθορίζει τον τύπο της προέλευσης δεδομένων.
    5. TKey: Αυτή είναι η παράμετρος τύπου που καθορίζει τον τύπο του κλειδιού.
    6. TElement : Αυτή είναι η παράμετρος τύπου που καθορίζει τον τύπο του στοιχείου.

2. Εάν θέλετε να δημιουργήσετε ένα λεξικό σύμφωνα με την καθορισμένη λειτουργία επιλογέα πλήκτρων από τη δεδομένη πηγή δεδομένων, υπερφορτώστε την ακόλουθη μέθοδο:





Παράμετροι:



    1. πηγή : Η πηγή μπορεί να είναι μια IEnumerable (λίστα) στην οποία το λεξικό δημιουργείται από αυτήν την πηγή.
    2. επιλογέας κλειδιού : Αυτή είναι μια συνάρτηση που χρησιμοποιείται για τη λήψη του κλειδιού από κάθε στοιχείο.
    3. Πηγή TS: Αυτό αναφέρεται στον τύπο της πηγής δεδομένων.
    4. TKey : Καθορίζει τον τύπο του κλειδιού.

Παράδειγμα 1: Καθορισμένη λειτουργία επιλογέα κλειδιού και στοιχείου

Δημιουργήστε μια λίστα με τον τύπο 'Λογαριασμός' που περιέχει τέσσερα χαρακτηριστικά (Acc_ID, Acc_Name, Industry, Revenue) με πέντε εγγραφές.

1. Δημιουργήστε ένα λεξικό από την προηγούμενη λίστα με το κλειδί ως Acc_ID και Τιμή ως Acc_Name.
2. Δημιουργήστε ένα λεξικό από την προηγούμενη λίστα με το κλειδί ως Acc_Name και Τιμή ως Έσοδα.

χρησιμοποιώντας Σύστημα ;
χρησιμοποιώντας System.Linq ;
χρησιμοποιώντας Σύστημα.Συλλογές.Γενικές ;

τάξη Πληροφορίες λογαριασμού
{
δημόσιο στατικός κενός Κύριος ( )
{
// Δημιουργία λίστας τύπου - Λογαριασμός.
Λίστα λεπτομερειών = νέος Λίστα ( ) ;
// Προσθήκη 5 εγγραφών στη λίστα.
Λεπτομέριες . Προσθήκη ( νέος λογαριασμός { Acc_ID = 1 , Acc_Name = 'Linux' , Βιομηχανία = 'Εκπαίδευση' ,Εσοδα = 2500 } ) ;
Λεπτομέριες . Προσθήκη ( νέος λογαριασμός { Acc_ID = 2 , Acc_Name = 'Πύθων' , Βιομηχανία = 'Bootcamp' ,Εσοδα = 10000 } ) ;
Λεπτομέριες . Προσθήκη ( νέος λογαριασμός { Acc_ID = 3 , Acc_Name = 'Ιάβα' , Βιομηχανία = 'Εκπαίδευση' ,Εσοδα = 500 } ) ;
Λεπτομέριες . Προσθήκη ( νέος λογαριασμός { Acc_ID = 4 , Acc_Name = '.ΚΑΘΑΡΑ' , Βιομηχανία = 'Εκπαίδευση' ,Εσοδα = 2080 } ) ;
Λεπτομέριες . Προσθήκη ( νέος λογαριασμός { Acc_ID = 5 , Acc_Name = 'Μαντείο' , Βιομηχανία = 'Δουλειά' ,Εσοδα = 2090 } ) ;

// Δημιουργήστε ένα λεξικό από την παραπάνω λίστα με το κλειδί ως Acc_ID και την τιμή ως Acc_Name
Κονσόλα . WriteLine ( ' ----Κλειδί ως Acc_ID και τιμή ως Acc_Name----' ) ;
Λεξικό accounts_dict1 = Λεπτομέριες . To Λεξικό ( ι => ι . Acc_ID , ι => ι . Acc_Name ) ;

για κάθε ( KeyValuePair i σε accounts_dict1 )
{
Κονσόλα . WriteLine ( 'Αναγνωριστικό λογαριασμού :' + Εγώ . Κλειδί + ' Ονομα λογαριασμού :' + Εγώ . αξία ) ;
}

// Δημιουργήστε ένα λεξικό από την παραπάνω λίστα με το κλειδί ως όνομα_λογισμού και την τιμή ως έσοδα
Κονσόλα . WriteLine ( ' ----Κλειδί ως Acc_Name και Τιμή ως Έσοδα----' ) ;
Λογαριασμοί λεξικού_dict2 = Λεπτομέριες . To Λεξικό ( μεγάλο => μεγάλο . Acc_Name , λ => μεγάλο . Εσοδα ) ;

για κάθε ( KeyValuePair k σε accounts_dict2 )
{
Κονσόλα . WriteLine ( 'Ονομα λογαριασμού :' + κ . Κλειδί + 'Λογαριασμός-Έσοδα :' + κ . αξία ) ;
}

}
}

// Δημιουργία κλάσης με όνομα - Λογαριασμός με τέσσερα χαρακτηριστικά
δημόσιο τάξη λογαριασμός
{
δημόσιο ενθ Acc_ID { παίρνω ; σειρά ; }
δημόσιο σειρά Acc_Name { παίρνω ; σειρά ; }
δημόσιο σειρά Βιομηχανία { παίρνω ; σειρά ; }
δημόσιο ενθ Εσοδα { παίρνω ; σειρά ; }
}

Παραγωγή:

Εξήγηση:

1. Δημιουργήστε μια κλάση με το όνομα 'Account' με τέσσερα χαρακτηριστικά.

2. Στην κύρια τάξη, δημιουργήστε λίστα τύπου «Λογαριασμός» και εισαγάγετε πέντε εγγραφές σε αυτήν.

3. Δημιουργήστε ένα λεξικό από την προηγούμενη λίστα με το κλειδί ως Acc_ID και Τιμή ως Acc_Name. Εδώ, καθορίζουμε το TKey ως int και το TElement ως συμβολοσειρά. Μέσα στη μέθοδο ToDictionary(), περνάμε το Acc_ID στον keySelector και το Acc_Name στο elementSelector. Τέλος, χρησιμοποιούμε τον βρόχο «foreach» για να επαναλάβουμε το λεξικό και να επιστρέψουμε τα κλειδιά και τις τιμές χρησιμοποιώντας τις ιδιότητες κλειδιού και τιμής.

4. Δημιουργήστε ένα λεξικό από την προηγούμενη λίστα με το κλειδί ως Acc_Name και την τιμή ως Έσοδα. Εδώ, καθορίζουμε το TKey ως συμβολοσειρά και το TElement ως int. Μέσα στη μέθοδο ToDictionary(), περνάμε το Acc_Name στο keySelector και το Revenue στο elementSelector. Τέλος, χρησιμοποιούμε τον βρόχο «foreach» για να επαναλάβουμε το λεξικό και να επιστρέψουμε τα κλειδιά και τις τιμές χρησιμοποιώντας τις ιδιότητες κλειδιού και τιμής.

Παράδειγμα 2: Καθορισμένος επιλογέας κλειδιού

Χρησιμοποιήστε τον προηγούμενο κώδικα και δημιουργήστε ένα λεξικό από την προηγούμενη λίστα με το κλειδί ως Acc_ID.

χρησιμοποιώντας Σύστημα ;
χρησιμοποιώντας System.Linq ;
χρησιμοποιώντας Σύστημα.Συλλογές.Γενικές ;

τάξη Πληροφορίες λογαριασμού
{
δημόσιο στατικός κενός Κύριος ( )
{
// Δημιουργία λίστας τύπου - Λογαριασμός.
Λίστα λεπτομερειών = νέος Λίστα ( ) ;
// Προσθήκη 5 εγγραφών στη λίστα.
Λεπτομέριες . Προσθήκη ( νέος λογαριασμός { Acc_ID = 1 , Acc_Name = 'Linux' , Βιομηχανία = 'Εκπαίδευση' ,Εσοδα = 2500 } ) ;
Λεπτομέριες . Προσθήκη ( νέος λογαριασμός { Acc_ID = 2 , Acc_Name = 'Πύθων' , Βιομηχανία = 'Bootcamp' ,Εσοδα = 10000 } ) ;
Λεπτομέριες . Προσθήκη ( νέος λογαριασμός { Acc_ID = 3 , Acc_Name = 'Ιάβα' , Βιομηχανία = 'Εκπαίδευση' ,Εσοδα = 500 } ) ;
Λεπτομέριες . Προσθήκη ( νέος λογαριασμός { Acc_ID = 4 , Acc_Name = '.ΚΑΘΑΡΑ' , Βιομηχανία = 'Εκπαίδευση' ,Εσοδα = 2080 } ) ;
Λεπτομέριες . Προσθήκη ( νέος λογαριασμός { Acc_ID = 5 , Acc_Name = 'Μαντείο' , Βιομηχανία = 'Δουλειά' ,Εσοδα = 2090 } ) ;

// Δημιουργήστε ένα λεξικό από την παραπάνω Λίστα με το κλειδί ως Acc_ID.
Λεξικό accounts_dict = Λεπτομέριες . To Λεξικό ( ι => ι . Acc_ID ) ;
για κάθε ( KeyValuePair i σε accounts_dict )
{
Κονσόλα . WriteLine ( 'Κλειδί:' + Εγώ . Κλειδί + '-->  Όνομα λογαριασμού :' + Εγώ . αξία . Acc_Name
+ ' Λογαριασμός-Βιομηχανία :' + Εγώ . αξία . Βιομηχανία
+ ' Λογαριασμός-Έσοδα :' + Εγώ . αξία . Εσοδα ) ;
}

}
}

// Δημιουργία κλάσης με όνομα - Λογαριασμός με τέσσερα χαρακτηριστικά
δημόσιο τάξη λογαριασμός
{
δημόσιο ενθ Acc_ID { παίρνω ; σειρά ; }
δημόσιο σειρά Acc_Name { παίρνω ; σειρά ; }
δημόσιο σειρά Βιομηχανία { παίρνω ; σειρά ; }
δημόσιο ενθ Εσοδα { παίρνω ; σειρά ; }
}

Παραγωγή:

Εξήγηση:

Εδώ, δημιουργούμε ένα λεξικό με το κλειδί ως Acc_ID. Αυτό λειτουργεί ως κλειδί για κάθε εγγραφή στο λεξικό που δημιουργήσαμε από τη λίστα. Μετά από αυτό, χρησιμοποιούμε τον βρόχο 'foreach' για να λάβουμε τα κλειδιά και τις τιμές (με χαρακτηριστικά) χρησιμοποιώντας τις ιδιότητες κλειδιού και τιμής.

Παράδειγμα 3: Διπλότυπα κλειδιά – ArgumentException

Δημιουργήστε μια λίστα με δύο εγγραφές και προσπαθήστε να τη μετατρέψετε σε λεξικό με κλειδί το Acc_ID.

χρησιμοποιώντας Σύστημα ;
χρησιμοποιώντας System.Linq ;
χρησιμοποιώντας Σύστημα.Συλλογές.Γενικές ;

τάξη Πληροφορίες λογαριασμού
{
δημόσιο στατικός κενός Κύριος ( )
{
// Δημιουργία λίστας τύπου - Λογαριασμός.
Λίστα λεπτομερειών = νέος Λίστα ( ) ;
// Προσθήκη 2 εγγραφών στη λίστα.
Λεπτομέριες . Προσθήκη ( νέος λογαριασμός { Acc_ID = 1 , Acc_Name = 'Linux' , Βιομηχανία = 'Εκπαίδευση' ,Εσοδα = 2500 } ) ;
Λεπτομέριες . Προσθήκη ( νέος λογαριασμός { Acc_ID = 1 , Acc_Name = 'Πύθων' , Βιομηχανία = 'Bootcamp' ,Εσοδα = 10000 } ) ;

// Προσπαθήστε να δημιουργήσετε ένα Λεξικό από την παραπάνω Λίστα με το κλειδί ως Acc_ID.
Λεξικό accounts_dict = Λεπτομέριες . To Λεξικό ( ι => ι . Acc_ID ) ;

}
}

// Δημιουργία κλάσης με όνομα - Λογαριασμός με τέσσερα χαρακτηριστικά
δημόσιο τάξη λογαριασμός
{
δημόσιο ενθ Acc_ID { παίρνω ; σειρά ; }
δημόσιο σειρά Acc_Name { παίρνω ; σειρά ; }
δημόσιο σειρά Βιομηχανία { παίρνω ; σειρά ; }
δημόσιο ενθ Εσοδα { παίρνω ; σειρά ; }
}

Εξαίρεση:

Μια μη χειριζόμενη εξαίρεση που είναι το System.Το ArgumentException εγείρεται καθώς το κλειδί είναι διπλότυπο (1) και στα δύο Acc_ID.

Παράδειγμα 4: Null Source – ArgumentNullException

Δημιουργήστε μια λίστα με τον τύπο 'Λογαριασμός' και αντιστοιχίστε σε αυτήν null. Προσπαθήστε να δημιουργήσετε ένα λεξικό από την προηγούμενη λίστα με το κλειδί ως Acc_ID.

χρησιμοποιώντας Σύστημα ;
χρησιμοποιώντας System.Linq ;
χρησιμοποιώντας Σύστημα.Συλλογές.Γενικές ;

τάξη Πληροφορίες λογαριασμού
{
δημόσιο στατικός κενός Κύριος ( )
{
// Δημιουργία λίστας τύπου - Λογαριασμός και εκχώρηση null σε αυτόν.
Λίστα λεπτομερειών = μηδενικό ;

// Προσπαθήστε να δημιουργήσετε ένα Λεξικό από την παραπάνω Λίστα με το κλειδί ως Acc_ID.
Λεξικό accounts_dict = Λεπτομέριες . To Λεξικό ( ι => ι . Acc_ID ) ;

}
}

// Δημιουργία κλάσης με όνομα - Λογαριασμός με τέσσερα χαρακτηριστικά
δημόσιο τάξη λογαριασμός
{
δημόσιο ενθ Acc_ID { παίρνω ; σειρά ; }
δημόσιο σειρά Acc_Name { παίρνω ; σειρά ; }
δημόσιο σειρά Βιομηχανία { παίρνω ; σειρά ; }
δημόσιο ενθ Εσοδα { παίρνω ; σειρά ; }
}

Εξαίρεση:

Μια μη χειριζόμενη εξαίρεση που είναι το System.ArgumentNullException εμφανίζεται επειδή η λίστα είναι μηδενική.

συμπέρασμα

Μάθαμε πώς να δημιουργήσουμε ένα λεξικό από τη λίστα IEnumerable (εδώ, είναι η λίστα) χρησιμοποιώντας τη μέθοδο ToDictionary() στο C# LINQ. Αυτή η μέθοδος μπορεί να υπερφορτωθεί με δύο τρόπους. Συζητήσαμε και τις δύο μεθόδους με παραδείγματα. Επίσης, μάθαμε τις δύο περιπτώσεις εξαίρεσης που ανακύπτουν με αυτήν τη μέθοδο όταν η πηγή δεδομένων/ κλειδίΕπιλογέας/ στοιχείοΕπιλογής είναι μηδενική και τα κλειδιά είναι διπλότυπα.