Dictionary 在达特朗切一张地图

Dictionary 在达特朗切一张地图,dictionary,dart,slice,Dictionary,Dart,Slice,我需要切一张地图。我让它像这样工作: Map sliceMap(Map map, offset, limit) { Map result = new Map(); if (map.length < limit) { limit = map.length; } map.keys.toList().getRange(offset, limit).forEach((key) { result[key] = map[key]; }); return res

我需要切一张地图。我让它像这样工作:

Map sliceMap(Map map, offset, limit) {
  Map result = new Map();
  if (map.length < limit) {
     limit = map.length;
  }
  map.keys.toList().getRange(offset, limit).forEach((key) {
    result[key] = map[key];
  });
  return result;
}

以下是我的价值观:

new Map.fromIterables(
    map.keys.skip(offset).take(limit),
    map.values.skip(offset).take(limit)
);
这样,您就不必进行极限测试。

您可以使用:

地图切片地图地图、偏移、限制{ 返回新的Map.fromIterablemap.keys.skipoffset.takelimit, 值:k=>map[k]; }
由于地图的键的顺序是不确定的,这到底有多有用?@RandalSchwartz对于地图,键的顺序是保持不变的。并非所有的映射都是如此,例如HashMap.mainted,但未定义。你不能要求一个切片,比如说增加键顺序。因此,其中的一部分将具有未定义且相对无用的语义。也许最好退一步问问自己,为什么我需要一片?然后找出一个不同的答案,这个答案不需要这些。@RandalSchwartz我有一张46项的地图。这些项目按特定顺序设置;这种秩序永远不会改变。在我的应用程序中,我在某些情况下使用完整的地图,而在其他情况下(即项目11至20)使用它的一部分。我需要切片,我需要键/值对…仅仅因为您按特定顺序设置它们并不意味着您将按特定顺序获取它们。如果设置键a、b和c,则在按c、a、b的顺序迭代时可能会得到它们。顺序将是一致的,尽管我们希望它将在两次运行之间随机化,否则您将遭受与后来修复的Perl中的一个大安全漏洞相同的命运。
new Map.fromIterables(
    map.keys.skip(offset).take(limit),
    map.values.skip(offset).take(limit)
);