Verificare chiavi e valori
Fa parte della sezione Logica e flusso del percorso Dart di Coddy. Lezione 27 di 65.
Prima di accedere ai dati in una Map, è essenziale verificare che la chiave o il valore che stai cercando esista davvero. Dart fornisce due metodi per farlo: containsKey() e containsValue().
Il metodo containsKey() verifica se una determinata chiave esiste nella mappa, restituendo true se viene trovata e false altrimenti. È particolarmente utile prima di provare ad accedere a un valore e ti aiuta a evitare potenziali errori.
Map<String, String> userPermissions = {
'user123': 'admin',
'user456': 'editor',
'user789': 'viewer'
};
bool hasUser = userPermissions.containsKey('user123');
print(hasUser); // true
bool hasUnknownUser = userPermissions.containsKey('user999');
print(hasUnknownUser); // falseAllo stesso modo, containsValue() verifica se un valore specifico esiste in qualsiasi punto della mappa. Questo metodo esamina tutti i valori e restituisce true se trova una corrispondenza.
bool hasAdmin = userPermissions.containsValue('admin');
print(hasAdmin); // trueQuesti metodi sono fondamentali per scrivere codice sicuro che gestisca con eleganza i dati mancanti, evitando errori di runtime quando si lavora con contenuti dinamici delle mappe.
Sfida
FacileCrea un programma che gestisca un sistema di autenticazione degli utenti verificando le credenziali degli utenti e controllando i livelli di autorizzazione. Il tuo programma deve:
- Leggere una stringa di input che rappresenta il nome del sistema
- Leggere più coppie di input che rappresentano i nomi utente e i rispettivi livelli di autorizzazione (l’input terminerà quando riceverai
"users_done") - Leggere una stringa di input che rappresenta il nome utente da controllare
- Leggere una stringa di input che rappresenta il livello di autorizzazione da verificare
- Creare una Map per memorizzare i nomi utente come chiavi e i rispettivi livelli di autorizzazione come valori
- Usare
containsKey()per controllare se il nome utente esiste nel sistema - Usare
containsValue()per controllare se il livello di autorizzazione specificato esiste in qualsiasi punto del sistema - Stampare l’analisi dell’autenticazione nel formato esatto mostrato di seguito
Per esempio, se il nome del sistema è "Corporate Network", gli utenti includono "alice" con "admin", "bob" con "editor", "charlie" con "viewer", "diana" con "admin", il nome utente da controllare è "alice" e il livello di autorizzazione da verificare è "admin", il tuo programma dovrebbe produrre:
System: Corporate Network
User Database: {alice: admin, bob: editor, charlie: viewer, diana: admin}
Authentication Check:
Username 'alice' exists: true
Permission 'admin' exists in system: true
User 'alice' has permission 'admin': true
Access Status: GRANTED - User authenticated with valid permissions
Security Level: High (admin access detected)Se il nome del sistema è "School Portal", gli utenti includono "teacher1" con "instructor", "student1" con "student", "admin1" con "administrator", il nome utente da controllare è "guest" e il livello di autorizzazione da verificare è "student", il tuo programma dovrebbe produrre:
System: School Portal
User Database: {teacher1: instructor, student1: student, admin1: administrator}
Authentication Check:
Username 'guest' exists: false
Permission 'student' exists in system: true
User 'guest' has permission 'student': false
Access Status: DENIED - Username not found in system
Security Level: Low (user not registered)Se il nome del sistema è "Library System", gli utenti includono "librarian" con "staff", "member1" con "member", "member2" con "member", il nome utente da controllare è "librarian" e il livello di autorizzazione da verificare è "premium", il tuo programma dovrebbe produrre:
System: Library System
User Database: {librarian: staff, member1: member, member2: member}
Authentication Check:
Username 'librarian' exists: true
Permission 'premium' exists in system: false
User 'librarian' has permission 'premium': false
Access Status: DENIED - Permission level not available
Security Level: Medium (valid user, invalid permission)Il tuo programma deve usare containsKey() per verificare se il nome utente esiste e containsValue() per controllare se il livello di autorizzazione esiste in qualsiasi punto del sistema. Per verificare se l’utente specifico dispone dell’autorizzazione specifica, confronta il livello di autorizzazione effettivo dell’utente con quello richiesto. Determina il livello di sicurezza in base ai risultati: "High" se l’accesso è concesso con autorizzazioni di tipo amministratore (admin, administrator, staff), "Medium" se l’utente esiste ma dispone di autorizzazioni errate e "Low" se l’utente non esiste. Il formato dell’input sarà: nome del sistema, poi nomi utente e livelli di autorizzazione alternati, terminando con "users_done", seguiti dal nome utente da controllare e dal livello di autorizzazione da verificare.
Provalo tu
import 'dart:io';
void main() {
// Leggi il nome del sistema
String? systemName = stdin.readLineSync();
// Crea una Map per memorizzare i nomi utente e i relativi livelli di autorizzazione
Map<String, String> userDatabase = {};
// Leggi i dati degli utenti fino a "users_done"
while (true) {
String? input = stdin.readLineSync();
if (input == "users_done") {
break;
}
String username = input!;
String? permission = stdin.readLineSync();
userDatabase[username] = permission!;
}
// Leggi il nome utente da controllare e il livello di autorizzazione da verificare
String? usernameToCheck = stdin.readLineSync();
String? permissionToVerify = stdin.readLineSync();
// TODO: Scrivi il tuo codice qui sotto
// Usa containsKey() per verificare se il nome utente esiste
// Usa containsValue() per verificare se il livello di autorizzazione esiste nel sistema
// Verifica se l'utente specifico ha l'autorizzazione specifica
// Determina lo stato di accesso e il livello di sicurezza:
// - "High (admin access detected)" se l'accesso è consentito E l'autorizzazione è admin, administrator, o staff
// - "Medium (standard access)" se l'accesso è consentito ma l'autorizzazione non è di tipo admin
// - "Medium (valid user, invalid permission)" se l'utente esiste ma ha un'autorizzazione errata
// - "Low (user not registered)" se l'utente non esiste
// Stampa l'analisi dell'autenticazione
print("System: $systemName");
print("User Database: $userDatabase");
print("Authentication Check:");
// Aggiungi qui le istruzioni di output
}Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Logica e flusso
1Manipolazione avanzata delle liste
Proprietà delle liste: primo e ultimoStato della lista: isEmpty e isNotEmpInvertire una listaAggiungere a una lista: insertRimozione dalla lista: removeWhereRicerca in una lista: indexOfOrdinare una listaMescolare una listaRiepilogo - Organizzatore di liste4Manipolazione avanzata delle mappe
Iterare su una mappaVerificare chiavi e valoriProprietà delle mappe: chiavi e valoriAggiunta condizionale: putIfAbsentRimuovere elementi da una mappaMappe annidateRiepilogo - Aggiornamento dell'inventario2Operazioni funzionali sulle liste
Trasformare con 'map'Filtrare con 'where'Usare '.toList()'Verificare condizioni con 'any'Condizioni con 'every'Trovare con 'firstWhere'Riepilogo - Filtraggio dei dati3Insiemi
Che cos'è un insieme?Creare un insiemeAggiungere e rimuovere elementi dagli insiemiVerificare la presenza di elementi in un insiemeConvertire una lista in un insiemeUnione di insiemiIntersezione di insiemiDifferenza tra insiemiRiepilogo - Lista degli ospiti uniciEsercitati da solo: Compilatore Dart online