I have two Maps, bookingMap & reserveMap. Both maps have the same keys but different values. bookingMap is for the guest to book the seats whereas reserveMap is for the backend team. I want to compare the values of both maps with the help of their respective keys, if the values are equal I want to increment the totalSeats by +1 or +2. If the values don't match I want to subtract totalSeats by -1 or -2 respectively. Both maps have the same keys but map 1 can contain 10 out of 5 keys and Map 2 contains exactly 10 keys and values. If use if-else statements the code will be long. Is there a method or a way I'm missing?

The code below checks all the values, not the individuals.

import 'package:collection/collection.dart';

void main() {
  compareValues();
}

void compareValues() {
  int totalSeats = 0;

// Booking Map
  Map<String, int> bookingMap = {
    'c1': 1,
    'c2': 2,
    'c3': 3,
    'c4': 5,
  };

//Seat Map
  Map<String, int> reserveMap = {
    'c1': 1,
    'c2': 2,
    'c3': 3,
    'c4': 4,
    'c5': 6,

  };

  if (DeepCollectionEquality().equals(bookingMap.values, reserveMap.values)) {
    totalSeats = totalSeats + 1;
  } else {
    totalSeats = totalSeats - 1;
  }

  print(totalSeats);
}


Solution 1: ChessMax

I think you need iterate through all keys and compare values. Something like that:

void compareValues() {
  int totalSeats = 0;

  Map<String, int> bookingMap = {
    'c1': 1,
    'c2': 2,
    'c3': 3,
    'c4': 5,
  };

  Map<String, int> reserveMap = {
    'c1': 1,
    'c2': 2,
    'c3': 3,
    'c4': 4,
    'c5': 6,
  };

  var equals = true;

  for (final kv in bookingMap.entries) {
    if (reserveMap[kv.key] != kv.value) {
      equals = false;
      break;
    }
  }

  if (equals) {
    totalSeats = totalSeats + 1;
  } else {
    totalSeats = totalSeats - 1;
  }

  print(totalSeats);
}


Solution 2: Raj A

With the help of and altering @chessmax answer I solved the issue with the following code.

void compareValues() {
  int totalSeats = 0;

  Map<String, int> bookingMap = {
    'c1': 1,
    'c2': 2,
    'c3': 3,
    'c4': 4,
    'c5': 6,
  };

  Map<String, int> reserveMap = {
    'c1': 1,
    'c2': 2,
    'c3': 3,
    'c4': 4,
    'c5': 66,
  };

  for (final kv in bookingMap.entries) {
    if (reserveMap[kv.key] == kv.value) {
      totalSeats = totalSeats + 1;
    } else {
      totalSeats = totalSeats - 1;
    }
  }

  print(totalSeats);
}