确定一个 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]));
}
我发现 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]));
}