在达特朗切一张地图

时间:2016-12-28 23:17:05

标签: 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 result;
}

是否有更有效的方式和/或内置方式?我在API中找不到任何内容(https://api.dartlang.org/stable/1.21.0/dart-core/Map-class.html)。

来自aelayeb解决方案:

Map sliceMap(Map map, offset, limit) {
  return new Map.fromIterables(
      map.keys.skip(offset).take(limit - offset),
      map.values.skip(offset).take(limit - offset)
  );
}

2 个答案:

答案 0 :(得分:2)

以下是我的方法:

new Map.fromIterables(
    map.keys.skip(offset).take(limit),
    map.values.skip(offset).take(limit)
);

通过这种方式,您无需进行极限测试。

答案 1 :(得分:1)

您可以使用:

Map sliceMap(Map map, offset, limit) {
  return new Map.fromIterable(map.keys.skip(offset).take(limit),
      value: (k) => map[k]);
}