Tag: 数组

用于Ruby的填充arrays方法

这就是我现在所拥有的,它有点工作: def padding(a, b, c=nil) until a[b-1] a << c end end 这是它的工作原理: a=[1,2,3] padding(a,10,”YES”) =>[1, 2, 3, “YES”, “YES”, “YES”, “YES”, “YES”, “YES”, “YES”] a[1,2,3] padding(a,10,1) =>[1, 2, 3, 1, 1, 1, 1, 1, 1, 1] 但是当我没有为“c”输入值时崩溃了 a=[1,2,3] padding(a,10) Killed 我该怎么追加这个以避免崩溃? 另外,您如何建议更改此方法以使用它,如下所示: [1,2,3].padding(10) =>[1,2,3,nil,nil,nil,nil,nil,nil,nil] [1,2,3].padding(10, “YES”) =>[1, 2, 3, “YES”, “YES”, “YES”, “YES”, “YES”, […]

如何使用Ruby 2.3中引入的`Array#dig`和`Hash#dig`?

Ruby 2.3在Array和Hash上引入了一种名为dig的新方法。 我在关于新版本的博客文章中看到的例子是人为的,令人费解的: # Hash#dig user = { user: { address: { street1: ‘123 Main street’ } } } user.dig(:user, :address, :street1) # => ‘123 Main street’ # Array#dig results = [[[1, 2, 3]]] results.dig(0, 0, 0) # => 1 我没有使用三嵌套平面数组。 什么是如何有用的现实例子? UPDATE 事实certificate,这些方法解决了一个最常见的Ruby问题。 下面的问题有20个重复,所有这些都是通过使用dig解决的: 如何避免NoMethodError在嵌套哈希中缺少元素,而不重复nil检查? Ruby Style:如何检查嵌套的哈希元素是否存在

ruby中的数组数组,通过引用传递

我正在尝试在Ruby中创建一个填充零的5×5矩阵。 我使用的代码是: ruby-1.9.2-p290 :014 > a = Array.new(5, Array.new(5, 0)) => [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]] 但是,新创建的数组不是单独的对象,而是对一个对象的引用。 因此,当我尝试执行以下操作时: a[2][2] = 1我得到: => [[0, 0, 1, 0, 0], [0, 0, 1, 0, 0], [0, 0, 1, […]

如何检查Ruby数组是否包含多个值之一?

我有两个Ruby数组,我需要看看它们是否有任何共同的值。 我可以循环遍历一个数组中的每个值,并在另一个数组中包含?(),但我确信有更好的方法。 它是什么? (这些数组都包含字符串。) 谢谢。

按编号(最高的第一个)然后按字母(按字母顺序)对对象的集合进行排序

我正在建立一个小部件,以显示奥运会的奖牌数量。 我有一个“国家”对象的集合,其中每个对象都有一个“名称”属性,而“金”,“银”,“青铜”用于奖牌计数。 列表应该排序:1。首先通过总奖牌数2.如果相同的奖牌,按类型分类(金>银>铜,即两金> 1金+ 1银)3。如果相同的奖牌和类型,子 – 按字母顺序排列 我在ruby中这样做,但我认为语言并不重要。 我确实找到了一个解决方案,但如果感觉必须有更优雅的方式来做到这一点。 这是我做的: 使用加权奖牌总数创建虚拟属性。 因此,如果他们有2金和1银,加权总数将是“3.020100”。 1金,1银和1铜将是“3.010101” 由于我们希望将奖牌计数排在最前面,因此列表是按DESC排序的。 但是之后我们想要按字母顺序(即ASC)进行子排序。 所以我创建了一个字母反转单词的函数(即“canada”=>“xzmzwz”) 将加权总数转换为字符串,将反转名称连接起来(即“3010101xzmzwz”),然后按降序排序。 瞧。 到目前为止,有人已经想出如何在大约2行代码中做同样的事情。 关心赐教?

如何选择独特的元素

我想用uniq_elements方法扩展Array类,该方法返回多重性为1的元素。 我也uniq一样使用闭包到我的新方法。 例如: t=[1,2,2,3,4,4,5,6,7,7,8,9,9,9] t.uniq_elements # => [1,3,5,6,8] 关闭示例: t=[1.0, 1.1, 2.0, 3.0, 3.4, 4.0, 4.2, 5.1, 5.7, 6.1, 6.2] t.uniq_elements{|z| z.round} # => [2.0, 5.1] tt.uniq和t.to_set-t.uniq.to_set都tt.uniq 。 我不关心速度,我在程序中只调用一次,所以它可能很慢。

如何将Ruby中的数组排序为特定的顺序?

我想按照另一个数组中给出的特定顺序对数组进行排序。 EX:考虑一个数组 a=[“one”, “two”, “three”] b=[“two”, “one”, “three”] 现在我想按’b’的顺序对数组’a’进行排序,即 a.each do |t| # It should be in the order of ‘b’ puts t end 所以输出应该是 two one three 有什么建议?

在Ruby中将数组数组合并到只有前向的所有可能组合中

我有一个数组数组,如下所示: [[‘1′,’2’],[‘a’,’b’],[‘x’,’y’]] 我需要将这些数组合并为一个字符串,其中包含所有三个集合的所有可能组合,仅向前。 我已经看到了很多关于任何顺序的所有可能组合的例子,这不是我想要的。 例如,我不希望第一组中的任何元素出现在第二组之后,或者第三组中的任何元素出现在第一组或第二组之前,依此类推。 因此,对于上面的示例,输出将是: [‘1ax’, ‘1ay’, ‘1bx’, ‘1by’, ‘2ax’, ‘2ay’, ‘2bx’, ‘2by’] 数组的数量和每组的长度是动态的。 有人知道如何在Ruby中解决这个问题吗?

使用ruby splat运算符在哪里合法?

Splats很酷。 它们不只是用于爆炸arrays,尽管这很有趣。 它们还可以转换为数组并压平数组(请参阅http://github.com/mischa/splat/tree/master以获取他们所做的详尽列表。) 看起来无法对splat执行额外的操作,但在1.8.6 / 1.9中,以下代码抛出“意外的tSTAR”: foo = bar || *zap #=> unexpected tSTAR 虽然这有效: foo = *zap || bar #=> works, but of limited value splat在表达式中出现在哪里?

Ruby:将嵌套数组的字符串表示解析为Array?

假设我有字符串 “[1,2,[3,4,[5,6]],7]” 我如何将其解析为数组 [1,2,[3,4,[5,6]],7] ? 在我的使用案例中,嵌套结构和模式完全是任意的。 我目前的临时解决方案是在每个时段之后添加一个空格并使用YAML.load ,但是如果可能的话我想要一个更干净的空间。 (如果可能的话,不需要外部库)