确定一个 Map 是否是另一个 Map 的子集

Determine if one Map is a subset of another Map

我发现 package:collection/collection.dart 可以用来判断两个 Map 是否相等,但是我找不到任何方法来判断其中一个是否是另一个的子集一。例如,如果我有以下 Map

{
    'a': 'b',
    'c': [1,2,3],
    'd': 4  
}

以下是有效的子集:

{ 'a': 'b' }
{ 'c': [1,2,3] }
{ 'd': 4 }

{ 
    'a': 'b',
    'c': [1,2,3]
}

{
    'a': 'b',
    'd': 4  
}

{
    'c': [1,2,3],
    'd': 4  
}

但以下不是有效的子集:

{ 'a': 'x' }

{ 
    'a': 'b',
    'c': [1,2,99]
}

如何在 Dart (Flutter) 中测试它?

您可以获取每个 MapEntry 个候选子集并检查原始地图是否包含相同的值。如果 value 是一个集合,那么它必须使用 DeepCollectionEquality.

进行比较

这是我的代码:

import 'package:collection/collection.dart'; // import for DeepCollectionEquality

bool isSubset(Map map, Map subsetCandidate) {
  return subsetCandidate.entries.every(
      (entry) => DeepCollectionEquality().equals(entry.value, map[entry.key]));
}