具有额外状态的 Ruby 数组

标签 ruby arrays 2d

我正在尝试遍历一个数组并为 ruby​​ 中的 true 和 false 值添加第二个维度。

例如。我会将数组推送到另一个数组:

a = [[1,2,3,4],[5]]

我想遍历“a”内的每个数组,并能够为每个单独的值标记 true 或 false 状态。类似于 java 中的 map 。

有什么想法吗?谢谢。

最佳答案

你最好从这个开始:

a = [{ 1 => false, 2 => false, 3 => false, 4 => false }, { 5 => false }]

然后您可以根据需要翻转 bool 值。否则你将不得不用一堆测试来污染你的代码,看看你是否有 Fixnum (1, 2, ...) 或 Hash ({1 => true}),然后才能测试标志的值。

Ruby 1.9 中的散列是有序的,因此您不会因为切换到散列而丢失顺序。

您可以使用以下方法之一将您的数组转换为这种形式:

a = a.map { |x| Hash[x.zip([false] * x.length)] }
# or
a = a.map { |x| x.each_with_object({}) { |i,h| h[i] = false } }

如果使用 nil 表示“未访问”比以 false 开头更有意义,那么:

a = a.map { |x| Hash[x.zip([nil] * x.length)] }
# or
a = a.map { |x| x.each_with_object({}) { |i,h| h[i] = nil } }

一些有用的引用:

关于具有额外状态的 Ruby 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7670428/

相关文章:

ruby-on-rails - 无法在 ruby​​ 中转储匿名类类

ruby-on-rails - rails : Assign extra columns in HABTM join model

2d - 将高度图映射到基于网格的轮廓格式

ruby-on-rails - 我们如何配置 Rails 以不清除测试数据库?

数组的 Ruby 散列输出 {}

java - 为什么这个 Java 数组被认为是二维的?

javascript - 跟踪组件内数组变化的最佳方法是什么?

python - Python 中的二维数组

java - 选择哪个 : 2D or 3D for a java game

android - UNITY 触摸位置到世界位置 2D