Tag: 数组

在ruby中仅合并一个数组中两个数组的相应元素

你好,我在ruby中有以下两个数组 A=[“a”,”b”,”c”] B=[“d”,”e”,”f”] 而且我想制作这个 C = [“ad”, “be”, “cf”] 无论数组长度如何。 但是这两个数组的长度始终相同。 有一个巧妙的方法来做到这一点? 我的意思是不是用for循环迭代数组。

ruby数组循环总是对

我有以下数组: a = [‘sda’, ‘sdb’, ‘sdc’, ‘sdd’] 现在我想循环遍历这些条目,但总是有两个元素。 我现在这样做如下: while b = a.shift(2) # b is now [‘sda’, ‘sdb’] or [‘sdc’, ‘sdd’] end 这感觉有点不对,有更好的方法吗? 有没有办法轻易搞定[[‘sda’, ‘sdb’], [‘sdc’, ‘sdd’]] ? 我阅读了http://www.ruby-doc.org/core-1.9.3/Array.html,但我找不到有用的东西……

从Array中删除并返回Ruby中已删除的元素

如何从数组中删除一些元素并选择它们? 例如: class Foo def initialize @a = [1,2,3,4,5,6,7,8,9] end def get_a return @a end end foo = Foo.new b = foo.get_a.sth{ |e| e [1,2,3] p foo.get_a # => [4,5,6,7,8,9,10] 我可以用什么而不是foo.get_a.sth ?

为什么Enumerable#find /#detect即使在Hash上调用也会返回一个数组?

Enumerable#find / #detect的文档说: find(ifnone = nil) { |obj| block } → obj or nil find(ifnone = nil) → an_enumerator 将枚举中的每个条目传递给块 。 返回第一个块不为false的块。 如果没有对象匹配,则调用ifnone并在指定时返回其结果,否则返回nil 。 但是,当在Hash上调用它时,结果将类型更改为Array而不是原始Hash。 是关于此数据类型的一些实现错误还是一些历史约定? {a: ‘a’, b:’b’}.find {|k, v| v == ‘b’} # => [:b, ‘b’]

我可以在Rails中使用link_to创建一系列链接吗?

我有一个我想要显示的url/标题对值列表。 (更具体地说,每个对象都有自己的链接列表,一些有0,有些有1,有些有更多。)我希望它们出现在逗号分隔的列表中。 所以我在.erb文件中写了这个: 令我惊讶的是,这显示了我想要创建的链接的HTML代码的逗号分隔列表; 也就是说,它采用了所有的尖括号和&符号编码。 为了确保高阶函数没有任何有趣的东西,我尝试了一个更为迫切的版本: <% a < 当然,结果相同。 但我不认为我滥用link_to ,因为如果我修改它 , 然后它实际上创建了链接。 它几乎就是我想要的,除了在最后一个之后还有一个额外的逗号。 是否有一些魔法在引擎盖下使用link_to使其根据输出的前进方向采取不同的行动? 有没有办法绕过那个魔法? join语义正是我想要的,我可以明确地弄清楚如何滚动自己(使用each_index,我猜)但它似乎是一个非常重的和非Ruby解决方案,必须是一个常见的问题。

如何在Ruby中声明二维数组

我想在Ruby中使用二维数组,我可以像下面这样访问: if @array[x][y] == “1” then @array[x][y] = “0” 问题是:我不知道数组维度的初始大小,并且我增长了数组(使用<<运算符)。 如何将其声明为实例变量,所以我没有这样的错误? undefined method `[]’ for nil:NilClass (NoMethodError) 问题更新: @array = Array.new {Array.new} 现在对我有用,所以下面马特的评论是正确的! 我刚刚发现我收到错误的原因是因为我迭代了这个数组: for i in 0..@array.length for j in 0..@array[0].length @array[i][j] … 这显然是错误的,并产生了错误。 必须是这样的: for i in 0..@array.length-1 for j in 0..@array[0].length-1 @array[i][j] …

ruby 1.9如何将数组转换为不带括号的字符串

我的问题是如何在没有得到括号和引号的情况下将数组元素转换为ruby 1.9中的字符串。 我有一个数组(数据库提取),我想用它来创建一个定期报告。 myArray = [“Apple”, “Pear”, “Banana”, “2”, “15”, “12”] 在ruby 1.8中,我有以下几行 reportStr = “In the first quarter we sold ” + myArray[3].to_s + ” ” + myArray[0].to_s + “(s).” puts reportStr 这产生了(想要的)输出 在第一季度,我们卖出了2个Apple。 ruby1.9中相同的两行产生(不想要) 在第一季度,我们卖出[“2”] [“Apple”](s)。 在阅读文档Ruby 1.9.3 doc#Array#slice后,我以为我可以生成类似的代码 reportStr = “In the first quarter we sold ” + myArray[3] + ” ” […]

使用Regex表达式搜索Ruby数组

嗨我有小ruby函数,拆分Ruby数组如下: – def rearrange arr,from,to sidx = arr.index from eidx = arr.index to arr[sidx] = arr[sidx+1..eidx] end arr= [“Red”, “Green”, “Blue”, “Yellow”, “Cyan”, “Magenta”, “Orange”, “Purple”, “Pink”, “White”, “Black”] start = “Yellow” stop = “Orange” rearrange arr,start,stop puts arr.inspect #=> [“Red”, “Green”, “Blue”, [“Cyan”, “Magenta”, “Orange”], “Cyan”, “Magenta”, “Orange”, “Purple”, “Pink”, “White”, “Black”] 我需要在我的开始使用正则表达式并停止搜索,例如 开始=“/大喊/” […]

为什么hex – > base64与base64 – > hex使用pack和unpack有什么不同?

我得到了这段代码,它从hex转换为base64,反之亦然。 我从另一个SO问题得到了to_base64 ,我写了一些猜测和反复试验的to_hex 。 class String def to_base64 [[self].pack(“H*”)].pack(“m0”) end def to_hex self.unpack(“m0”).first.unpack(“H*”).first end end 但即使在阅读完文档后,我也没有真正理解pack和unpack方法。 具体来说,我对这两种实现之间的不对称感到困惑。 从概念上讲,在这两种情况下,我们采用在某个基数(16或64)中编码的字符串,并且我们希望将其转换为另一个基数。 那么为什么我们to_hex像这样实现to_hex : def to_hex [[self].pack(“m0”)].pack(“H*”) end 或者to_base64使用unpack ? 为什么我们选择的基础完全改变了我们需要用来完成转换的方法?

为什么Ruby在做同样的事情时会有拉链和转置?

他们似乎做同样的事情。 g = [{ a: “A” }, { b: “B” }] r = [{ x: “X” }, { y: “Y” }] g.zip(r) # => [[{:a=>”A”}, {:x=>”X”}], [{:b=>”B”}, {:y=>”Y”}]] [g,r].transpose # => [[{:a=>”A”}, {:x=>”X”}], [{:b=>”B”}, {:y=>”Y”}]] 为什么有两种方法?