【发布时间】:2017-05-13 06:25:22
【问题描述】:
我需要对地图进行切片。我让它像这样工作:
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)
);
}
【问题讨论】:
-
由于 Map 的键是不确定的,这实际上有多大用处?
-
@RandalSchwartz for
Map,密钥顺序保持不变。并非所有地图都如此,例如HashMap。 -
已维护,但未定义。您不能在说“增加密钥顺序”时要求切片。因此,其中的一部分将具有未定义且相对无用的语义。可能最好退后一步,问自己“为什么我需要一片?”并找出一个不需要的不同答案。
-
@RandalSchwartz 我有一张包含 46 个项目的地图。这些项目按特定顺序设置;这个顺序永远不会改变。在我的应用程序中,我在某些情况下使用完整的地图,而在其他情况下使用它的一部分(即项目 11 到 20)。我需要“切片”和“键/值”对...
-
仅仅因为您按特定顺序设置它们并不意味着您将按特定顺序获取它们。如果你设置了键 a、b 和 c,你可能会在按 c、a、b 的顺序迭代时得到它们。顺序将一致,尽管我们希望它在运行之间是随机的,否则您将遭受与后来修复的 Perl 中的大型安全漏洞相同的命运。
标签: dictionary dart slice