- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
假设我需要对 Hash
的每个元素执行一项简单的任务,例如将其值增加 1
,或将值更改为包含该值的数组。我一直这样做
hash.map{ |k, v| [k, v+1] }.to_h
v+1
只是一个例子,可以是任何东西。
有没有更简洁的方法来做到这一点?我不太喜欢将 HashMap 到 2 维数组的数组,然后记得再次将其转换为哈希。
可能更好的示例:
hash.hash_map{ |v| v+1 }
这样一些像字符串转换(to_s
)可能被简化为
hash.hash_map(&:to_s)
重复说明:我不是在寻找 Hash[...]
或 .to_h
,我是想问是否有人知道更紧凑、更简洁的解决方案。
最佳答案
这正是 Ruby 集合框架的工作方式。 Enumerable
中有一个 map
方法,它对散列、数组、列表、集合、树、流或任何其他你一无所知可能想出。它只知道有一个名为 each
的方法,每次迭代将 yield
一个 单个元素。就是这样。
请注意,这与 Java 和 .NET 的集合框架的工作方式相同。所有集合操作始终返回相同的类型:在 .NET 中,返回的是 IEnumerable
,在 Ruby 中,返回的是 Array
。
另一种设计方法是集合操作是类型保留的,即映射一个集合将产生一个集合,等等。例如,这就是在 Smalltalk 中完成的方式。然而,在 Smalltalk 中,它是通过将几乎相同的方法复制并粘贴到每个不同的集合中来实现的。 IE。如果你想实现你自己的集合,在 Ruby 中,你只需要实现 each
,其他一切都是免费的,而在 Smalltalk 中,你必须单独实现每一个集合方法。 (在 Ruby 中,这将超过 40 个方法。)
Scala 是第一种设法提供具有类型保留操作且无需代码重复的集合框架的语言,但直到 Scala 2.8(2010 年发布)才弄明白这一点。 (关键是集合构建器的想法。)Ruby 的集合库是在 1993 年设计的,比我们弄清楚如何在不重复代码的情况下进行类型保留集合操作早 17 年。此外,Scala 严重依赖其复杂的静态类型系统和类型级元编程来在编译时找到正确的集合构建器。这不是该方案工作所必需的,但必须在运行时为每个操作查找构建器可能会产生高昂的运行时成本。
您可以做的是添加不属于标准 Enumerable
协议(protocol)的新方法,例如类似于 Scala 的 mapValues
和 mapKeys
.
关于ruby - 在 ruby 中映射哈希的更简洁方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30889765/
我正在用 C# 编写动态语言的解释器,并将原始函数实现为具有虚拟 Apply 方法的抽象类 Primitive,其中每个实际原始函数都是重写 Apply 的子类。 (另一种方法是只拥有类 Primit
我正在用 C# 编写动态语言的解释器,并将原始函数实现为具有虚拟 Apply 方法的抽象类 Primitive,其中每个实际原始函数都是重写 Apply 的子类。 (另一种方法是只拥有类 Primit
我是 Dapper 的新手我正在尝试了解它实际上是如何映射事物的。我有以下数据库结构: calendar | Id | Name | meeting_room | Id | Calendar_id
抱歉问题标题很糟糕。有没有办法在一行中做到这一点: Button button = (Button)Gridview.Cells[0].FindControl("controlname"); butt
在 Java 中在声明点和使用点声明列表/数组文字的tersest方法是什么? 作为次要问题,我更喜欢一种不会导致编译时警告或要求抑制警告的方法。 注意:就我个人而言,这是针对Java 8ish on
什么是现代、简洁、快速的方法来测试节点是否有任何与给定选择器匹配的子节点? “简洁”是指类似于 jQuery 或函数式风格,例如避免循环。我知道本地选择器越来越多地使用这种类型的东西,但没有跟上发展的
getFirstNotNullResult 执行函数列表,直到其中一个函数返回非空值。 如何更优雅/简洁地实现 getNotNullFirstResult? object A { def main
根据 stackoverflow 上某人的推荐,我使用了 jquery succint https://github.com/micjamking/Succinct截断我在 php 网站上的帖子。 它
我是一名优秀的程序员,十分优秀!