Sprawdzanie kluczy i wartości
Część sekcji Logika i przepływ sterowania ścieżki Dart w Coddy. Lekcja 27 z 65.
Przed uzyskaniem dostępu do danych w Map należy sprawdzić, czy szukany klucz lub wartość rzeczywiście istnieje. Dart udostępnia do tego dwie metody: containsKey() i containsValue().
Metoda containsKey() sprawdza, czy w mapie istnieje określony klucz. Zwraca true, jeśli go znajdzie, a w przeciwnym razie false. Jest to szczególnie przydatne przed próbą uzyskania dostępu do wartości i pomaga uniknąć potencjalnych błędów.
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); // falsePodobnie containsValue() sprawdza, czy określona wartość znajduje się gdziekolwiek w mapie. Ta metoda przeszukuje wszystkie wartości i zwraca true, jeśli znajdzie dopasowanie.
bool hasAdmin = userPermissions.containsValue('admin');
print(hasAdmin); // trueTe metody są kluczowe przy pisaniu bezpiecznego kodu, który płynnie obsługuje brakujące dane, zapobiegając błędom w czasie wykonywania podczas pracy z dynamiczną zawartością mapy.
Wyzwanie
ŁatwyUtwórz program, który zarządza systemem uwierzytelniania użytkowników, weryfikując dane logowania i sprawdzając poziomy uprawnień. Twój program powinien:
- Wczytać ciąg znaków reprezentujący nazwę systemu
- Wczytać wiele par danych wejściowych reprezentujących nazwy użytkowników i ich poziomy uprawnień (wczytywanie zakończy się po otrzymaniu
"users_done") - Wczytać ciąg znaków reprezentujący nazwę użytkownika do sprawdzenia
- Wczytać ciąg znaków reprezentujący poziom uprawnień do zweryfikowania
- Utworzyć Mapę do przechowywania nazw użytkowników jako kluczy, a ich poziomów uprawnień jako wartości
- Użyć
containsKey(), aby sprawdzić, czy użytkownik istnieje w systemie - Użyć
containsValue(), aby sprawdzić, czy określony poziom uprawnień istnieje w systemie - Wypisać analizę uwierzytelniania w dokładnym formacie pokazanym poniżej
Na przykład, jeśli nazwa systemu to "Corporate Network", użytkownicy to między innymi "alice" z uprawnieniami "admin", "bob" z uprawnieniami "editor", "charlie" z uprawnieniami "viewer" oraz "diana" z uprawnieniami "admin", nazwą użytkownika do sprawdzenia jest "alice", a poziomem uprawnień do zweryfikowania jest "admin", program powinien wypisać:
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)Jeśli nazwa systemu to "School Portal", użytkownicy to między innymi "teacher1" z uprawnieniami "instructor", "student1" z uprawnieniami "student" oraz "admin1" z uprawnieniami "administrator", nazwą użytkownika do sprawdzenia jest "guest", a poziomem uprawnień do zweryfikowania jest "student", program powinien wypisać:
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)Jeśli nazwa systemu to "Library System", użytkownicy to między innymi "librarian" z uprawnieniami "staff", "member1" z uprawnieniami "member" oraz "member2" z uprawnieniami "member", nazwą użytkownika do sprawdzenia jest "librarian", a poziomem uprawnień do zweryfikowania jest "premium", program powinien wypisać:
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)Twój program musi używać containsKey(), aby sprawdzić, czy użytkownik istnieje, oraz containsValue(), aby sprawdzić, czy dany poziom uprawnień istnieje w systemie. Aby sprawdzić, czy dany użytkownik ma określone uprawnienie, porównaj jego rzeczywisty poziom uprawnień z żądanym poziomem. Określ poziom bezpieczeństwa na podstawie wyników: "High", jeśli dostęp zostanie przyznany z uprawnieniami typu administratora (admin, administrator, staff), "Medium", jeśli użytkownik istnieje, ale ma nieprawidłowe uprawnienia, oraz "Low", jeśli użytkownik nie istnieje. Format danych wejściowych będzie następujący: nazwa systemu, następnie naprzemiennie nazwy użytkowników i poziomy uprawnień, zakończone przez "users_done", a potem nazwa użytkownika do sprawdzenia i poziom uprawnień do zweryfikowania.
Spróbuj swoich sił
import 'dart:io';
void main() {
// Wczytaj nazwę systemu
String? systemName = stdin.readLineSync();
// Utwórz Map do przechowywania nazw użytkowników i ich poziomów uprawnień
Map<String, String> userDatabase = {};
// Wczytuj dane użytkowników aż do "users_done"
while (true) {
String? input = stdin.readLineSync();
if (input == "users_done") {
break;
}
String username = input!;
String? permission = stdin.readLineSync();
userDatabase[username] = permission!;
}
// Wczytaj nazwę użytkownika do sprawdzenia i poziom uprawnień do zweryfikowania
String? usernameToCheck = stdin.readLineSync();
String? permissionToVerify = stdin.readLineSync();
// TODO: Napisz swój kod poniżej
// Użyj containsKey(), aby sprawdzić, czy nazwa użytkownika istnieje
// Użyj containsValue(), aby sprawdzić, czy poziom uprawnień istnieje w systemie
// Sprawdź, czy dany użytkownik ma dane uprawnienie
// Ustal status dostępu i poziom bezpieczeństwa:
// - "High (admin access detected)", jeśli przyznano dostęp ORAZ uprawnienie to admin, administrator, lub staff
// - "Medium (standard access)", jeśli przyznano dostęp, ale uprawnienie nie jest typu admin
// - "Medium (valid user, invalid permission)", jeśli użytkownik istnieje, ale ma niewłaściwe uprawnienie
// - "Low (user not registered)", jeśli użytkownik nie istnieje
// Wyświetl analizę uwierzytelniania
print("System: $systemName");
print("User Database: $userDatabase");
print("Authentication Check:");
// Dodaj tutaj instrukcje wyświetlające wyniki
}Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i przepływ sterowania
1Zaawansowana manipulacja listami
Właściwości listy: first i lastStan listy: isEmpty i isNotEmpOdwracanie listyDodawanie do listy: insertUsuwanie z listy: removeWhereWyszukiwanie na liście: indexOfSortowanie listyMieszanie elementów listyPodsumowanie – Organizator listy4Zaawansowane operacje na mapach
Iterowanie po mapieSprawdzanie kluczy i wartościWłaściwości mapy: klucze i wartościDodawanie warunkowe: putIfAbsentUsuwanie wpisów z mapyZagnieżdżone mapyPodsumowanie – aktualizacja stanu magazynowego2Operacje funkcyjne na listach
Przekształcanie za pomocą 'map'Filtrowanie za pomocą 'where'Używanie '.toList()'Sprawdzanie warunków za pomocą 'any'Warunki z użyciem 'every'Wyszukiwanie za pomocą 'firstWhere'Podsumowanie — filtrowanie danych5Projekt: Kalkulator koszyka zakupowego
Konfiguracja projektuDodawanie produktów do koszyka3Zbiory
Czym jest zbiór?Tworzenie zbioruDodawanie i usuwanie elementów ze zbiorówSprawdzanie, czy element znajduje się w zbiorzeKonwersja listy na zbiórSuma zbiorówCzęść wspólna zbiorówRóżnica zbiorówPodsumowanie — unikalna lista gościPoćwicz samodzielnie: Kompilator Dart online