美文网首页
Flutter如何比较两个Map相等

Flutter如何比较两个Map相等

作者: 少缶 | 来源:发表于2021-09-26 22:40 被阅读0次

Dart提供了mapEquals方法用于比较两个Map是否深度相等,示例代码:

import 'package:flutter/foundation.dart';

void main() {
  Map map1 = {'size': 38, 'color': 'red'};
  Map map2 = {'size': 38, 'color': 'red'};


  if(mapEquals(map1, map2)){
    print('yes');
  }else{
    print('no');
  }
}

下面我们来看一下mapEquals的源代码,一起研究一下方法具体是如何判断深度相等的:

/// Compares two maps for deep equality.
///
/// Returns true if the maps are both null, or if they are both non-null, have
/// the same length, and contain the same keys associated with the same values.
/// Returns false otherwise.
///
/// The term "deep" above refers to the first level of equality: if the elements
/// are maps, lists, sets, or other collections/composite objects, then the
/// values of those elements are not compared element by element unless their
/// equality operators ([Object.==]) do so.
///
/// See also:
///
///  * [setEquals], which does something similar for sets.
///  * [listEquals], which does something similar for lists.
bool mapEquals<T, U>(Map<T, U>? a, Map<T, U>? b) {
  if (a == null)
    return b == null;
  if (b == null || a.length != b.length)
    return false;
  /// Check whether two references are to the same object.
  if (identical(a, b))
    return true;
  for (final T key in a.keys) {
    if (!b.containsKey(key) || b[key] != a[key]) {
      return false;
    }
  }
  return true;
}

mapEquals的源代码相对比较简单,通过三个if语句和一个for循环语句可以看出,仅有三种情况会返回True:

  • 如果两个map都是null的话,返回True;
  • 两个map对象的引用相同,返回True;
  • 两个map的长度相对、key相等及key对应的value也同时相等时,返回True。

需要注意的是如果key对应的valuemaps, lists, sets,或其他集合/复合对象,则这些元素的值不会逐个深入进行比较,而是通过相等运算符==来比较。

相关文章

  • Flutter如何比较两个Map相等

    Dart提供了mapEquals方法用于比较两个Map是否深度相等,示例代码: 下面我们来看一下mapEquals...

  • go 判断两个 slice/struct/map 是否相等

    可以通过 reflect.DeepEqual 比较两个 slice/struct/map 是否相等。【亲测有效,也...

  • Kotlin之集合

    list Set Map Q1:键值相同的两个map相等么 看看Java的比较结果为 Java的结果是我们熟悉的,...

  • 判断两个数组是否相等

    如何比较两个数组内容是否相等一、不能通过 '==' 或者 '===' 来判断两个数组是否相等 因为JavaScr...

  • Java1.8-IdentityHashMap源码解析

    概述   IdentityHashMap利用Hash表来实现Map接口,比较键(和值)时使用引用相等性代替对象相等...

  • IdentityHashMap简介

    IdentityHashMap利用哈希表实现Map接口,不同的是,其比较键(或值)时,使用引用相等性代替对象相等性...

  • Go语言学习之——map

    1、定义:map[key的类型]value的类型 key的类型要求:map使用哈希表,必须可以比较相等除了slic...

  • es6 新语法

    ES6的Object.is()超越ES5 比较两个值是否相等 ES5 比较两个值是否相等,只有两个运算符:相等运算...

  • Cocos2dx之C++基础(五)

    const char ? 之间的关系 如何判断系统是32位还是64位 如何比较两个浮点数是否相等

  • 22.“=”、“==”、“===”区别

    = =、= = =运算符用于比较两个值是否相等。 如果相等返回true,否则返回false.= = 相等 =...

网友评论

      本文标题:Flutter如何比较两个Map相等

      本文链接:https://www.haomeiwen.com/subject/opozgltx.html