我有一个对象:
myObject = { 'a': 1, 'b': 2, 'c': 3 }
Run Code Online (Sandbox Code Playgroud)
我正在寻找一个本机方法,类似于Array.prototype.map
将使用如下:
newObject = myObject.map(function (value, label) {
return value * value;
});
// newObject is now { 'a': 1, 'b': 4, 'c': 9 }
Run Code Online (Sandbox Code Playgroud)
JavaScript是否具有map
对象的这种功能?(我想将它用于Node.JS,所以我不关心跨浏览器问题.)
是否有理由更喜欢使用map()
超过列表理解,反之亦然?它们中的任何一个通常比另一个更有效或被认为是更加pythonic?
我正在尝试将列表映射到十六进制,然后在其他地方使用列表.在python 2.6中,这很简单:
答: Python 2.6:
>>> map(chr, [66, 53, 0, 94])
['B', '5', '\x00', '^']
Run Code Online (Sandbox Code Playgroud)
但是,在Python 3.1中,上面返回了一个map对象.
B: Python 3.1:
>>> map(chr, [66, 53, 0, 94])
<map object at 0x00AF5570>
Run Code Online (Sandbox Code Playgroud)
如何在Python 3.x上检索映射列表(如上面的A中所示)?
或者,有更好的方法吗?我的初始列表对象有大约45个项目,id喜欢将它们转换为十六进制.
map(function, iterable, ...)
Run Code Online (Sandbox Code Playgroud)
将函数应用于iterable的每个项目并返回结果列表.如果传递了其他可迭代参数,则函数必须采用那么多参数,并且并行地应用于所有迭代的项.
如果一个iterable比另一个短,则假定使用None项扩展.
如果是None
function,则假定为identity函数; 如果有多个参数,则map()
返回一个由包含所有迭代中相应项的元组组成的列表(一种转置操作).
可迭代参数可以是序列或任何可迭代对象; 结果始终是一个列表.
这在制作笛卡尔积的过程中扮演什么角色?
content = map(tuple, array)
Run Code Online (Sandbox Code Playgroud)
将元组放在哪里有什么影响?我也注意到,如果没有map函数,输出就是abc
和它一样a, b, c
.
我想完全理解这个功能.参考定义也很难理解.太多花哨的绒毛.
鉴于{ k1: v1, k2: v2 ... }
我想要{ k1: f(v1), k2: f(v2) ... }
提供的字典,我传递了一个函数f
.
有没有这样的内置功能?或者我必须这样做
dict([(k, f(v)) for (k, v) in my_dictionary.iteritems()])
Run Code Online (Sandbox Code Playgroud)
理想情况下我会写
my_dictionary.map_values(f)
Run Code Online (Sandbox Code Playgroud)
要么
my_dictionary.mutate_values_with(f)
Run Code Online (Sandbox Code Playgroud)
也就是说,如果原始字典被改变或创建了副本,对我来说无关紧要.
好吧,这更像是一个计算机科学问题,而不是一个基于特定语言的问题,但是地图操作和foreach操作之间有区别吗?或者它们只是同一个东西的不同名称?
我在Firefox-3.5.7/Firebug-1.5.3和Firefox-3.6.16/Firebug-1.6.2中观察到了这一点
当我开火萤火虫时:
var x = new Array(3)
console.log(x)
// [undefined, undefined, undefined]
var y = [undefined, undefined, undefined]
console.log(y)
// [undefined, undefined, undefined]
console.log( x.constructor == y.constructor) // true
console.log(
x.map(function() { return 0; })
)
// [undefined, undefined, undefined]
console.log(
y.map(function() { return 0; })
)
// [0, 0, 0]
Run Code Online (Sandbox Code Playgroud)
这里发生了什么?这是一个错误,还是我误解了如何使用new Array(3)
?
我需要一个地图功能.Java中有这样的东西吗?
(对于那些想知道的人:我当然知道如何自己实现这个琐碎的功能...)
在Python的性能方面,是一个列表理解,还是比for循环更快的map(),filter()和reduce()等函数?从技术上讲,为什么它们"以C速度运行",而"for循环以python虚拟机速度运行"?
假设在我正在开发的游戏中,我需要使用for循环绘制复杂且巨大的地图.这个问题肯定是相关的,因为如果列表理解确实更快,那么为了避免滞后(尽管代码的视觉复杂性),这将是一个更好的选择.
我想将一个值映射转换为另一个具有相同键但具有应用于值的函数的映射.我认为在clojure api中有这样做的功能,但我一直无法找到它.
这是我正在寻找的一个示例实现
(defn map-function-on-map-vals [m f]
(reduce (fn [altered-map [k v]] (assoc altered-map k (f v))) {} m))
(println (map-function-on-map-vals {:a "test" :b "testing"} #(.toUpperCase %)))
{:b TESTING, :a TEST}
Run Code Online (Sandbox Code Playgroud)
有人知道是否map-function-on-map-vals
已经存在?我认为它确实(可能还有一个更好的名字).
map-function ×10
python ×5
dictionary ×2
javascript ×2
arrays ×1
clojure ×1
for-loop ×1
foreach ×1
java ×1
list ×1
node.js ×1
performance ×1
python-3.x ×1