Tag: arrays

Ruby的二维数组

我试图接受一个二维数组,搜索大于0的任何空格,然后将周围空格增加1。 array = [[0,0,0], [0,1,0], [0,0,0]] 最终输出应该如下所示 new_array = [[0,1,0], [1,1,1], [0,1,0]] 我现在设置它的方式是返回 [1,1,1,1] 它正在递增正确的空间,我想,我只是不确定如何将它们放回原始数组然后返回2D数组。 显然缺少一些步骤,任何帮助将不胜感激。 我理解为什么它会恢复原样,只是不清楚下一步。 def dilate(array) new_array = [] array.each_with_index do |row, rowIndex| row.each_with_index do |col, colIndex| if (array[rowIndex][colIndex] > 0) new_array << (array[rowIndex][colIndex -1] +1) new_array << (array[rowIndex -1][colIndex] +1) new_array << (array[rowIndex][colIndex +1] +1) new_array << (array[rowIndex +1][colIndex] +1) end […]

从没有空白的数组数组中删除所有项目

我有一个数组数组,我想删除所有在剥离空格后具有nil或空元素的项目。 看看这个片段: x = Array.new x << ["A","B", " ", "D"] x << [""," ", nil, ""] x << ["E","Q", "F", "M"] 我想删除第二条记录,因为它不包含任何实际数据。 最好的方法是什么? 我应该简单地迭代数组并编写if-else条件来测试吗?

折叠数组中连续的“相同”元素

目标 给定一系列元素和标准来确定两个元素是否为“相同”,返回一个新数组,其中已删除连续“相同”元素的运行以仅留下端点。 例如: a = [ {k:’a’,v:1}, {k:’b’,v:1}, {k:’c’,v:1}, {k:’d’,v:2}, {k:’e’,v:2}, {k:’f’,v:3}, {k:’g’,v:3}, {k:’h’,v:3}, {k:’i’,v:3}, {k:’j’,v:3}, {k:’k’,v:2}, {k:’l’,v:4}, {k:’m’,v:4}, {k:’n’,v:4}, {k:’o’,v:4} ] b = a.collapse_consecutive{ |h| h[:v] } #=> [ {k:’a’,v:1}, {k:’c’,v:1}, #=> {k:’d’,v:2}, {k:’e’,v:2}, #=> {k:’f’,v:3}, {k:’j’,v:3}, #=> {k:’k’,v:2}, #=> {k:’l’,v:4}, {k:’o’,v:4} ] 动机 在线图上绘制n个点时,除了终点之外,一系列连续的相同值结果对图形没有影响。 在下图中,黑色样本对最终图表没有影响。 我正在存储精细采样的图形,理想情况下要删除所有不相关的样本。 对于这个问题,我简化问题只是去除水平部分上的黑点,因为识别落在有角度的线性部分上的点是(a)更难和(b)更罕见(在我的情况下)。 目前的进展 到目前为止,我提出的最好的解决方案依赖于数组索引: class Array def collapse_consecutive […]

删除数组中的重复项并将其第二个值添加到数组中

我要转换: [[“val1”, “1”], [“val2”, “2”], [“val1”, “3”], [“val3”, “4”], [“val2”, “5”], [“val2”, “6”]] 至: [[“val1”, [“1”, “3”]], [“val2”, [“2”, “5”, “6”]], [“val3”, [“4”]] 删除子arrays的第一个值( “val1” )的副本,并将它们的第二个值( “1”和”3″ )放在一个数组中。 我可以在arrays上调用uniq ,但这只能解决问题的一半。 我给了我最好的裂缝: 将第二个数组的第一个值(我们可以调用值a)存储到另一个2d数组中,并在新数组上调用.uniq。 新的2d数组在值b中有一个空数组。 然后使用if语句循环遍历新数组,将原始数组值a与新数组值a进行比较。 如果原始数组中的值a与新数组中的val a匹配,则将其b值添加到新数组b值数组中。 这是我的方法,但很可能是一种更简单的方法。

Ruby(猴子修补arrays)

返回获取更多关于Bloc课程的帮助。 决定带给你们一些我正在使用Monkey Patching the Array Class的问题。 这个任务有8个规格可以满足,我现在卡在一个左边,我不知道该怎么办。 我只会给你RSpecs和我遇到麻烦的部分的书面要求,因为其他一切似乎都在传递。 此外,我将包括他们开始给我的入门脚手架,因此代码中没有混淆或无用的添加。 以下是Array Class Monkey Patch的书面要求: 编写一个在Array类的实例上调用的新new_map方法。 它应该使用它所调用的数组作为隐式( self )参数,但在其他方面表现相同。 ( 未完成 ) 写一个new_select! 行为与select类似的方法,但会改变调用它的数组。 它可以使用Ruby的内置集合选择方法。 ( 完整 ) 以下是有关Array类需要满足的RSpec: 注意:“返回具有更新值的数组”是唯一未传递的规范。 describe Array do describe ‘#new_map’ do it “returns an array with updated values” do array = [1,2,3,4] expect( array.new_map(&:to_s) ).to eq( %w{1 2 3 4} ) expect( […]

理解Ruby的repeated_permutation方法的源代码

我一直在用Ruby构建一个智能的Mastermind游戏。 在我的游戏中,如果您选择让计算机扮演代码破坏者的角色,那么计算机会对代码制作者的代码进行有根据的猜测。 作为我算法的一部分,计算机首先查看所有可能代码的完整列表。 例如,如果有6种颜色可供选择(红橙蓝绿紫黄),代码由4种颜色组成(允许重复),那么要查看所有可能的代码,您可以这样做: valid_colors = %w(red orange blue green purple yellow) all_possible_codes = valid_colors.repeated_permutation(4).to_a 而且all_possible_codes将是一个填充代表每个可能代码的数组的数组。 然后计算机从该列表中删除代码,因为它从每个猜测中获得反馈。 然而,我正在做的下一件事要求我使用JRuby 1.6.6,它使用Ruby 1.8.7,它没有repeat_permutation方法。 我需要用相同的function编写自己的方法。 所以我去了这里找到的源代码: http : //www.ruby-doc.org/core-1.9.3/Array.html#method-i-repeated_permutation 不幸的是,我不明白他们在做什么,或者我怎么能通过编写自己的方法来解决这个问题。 我对编程很新,但却无法解决这个问题。 任何帮助理解源代码将不胜感激!

是什么决定了一个可变类的爆炸方法是否返回`nil`?

通常,当没有进行修改时,对可变类,如String , Array或Hash bang方法返回nil 。 但有些Array爆炸方法,即collect! , map! , reverse! , rotate! , shuffle! sort! , sort_by! 和Hash爆炸方法,即merge! ,永远不会返回nil 。 这背后的理由是什么? 是什么让这些方法与众不同? 我不明白为什么知道数组是否按sort! 知道uniq!是否使数组成为唯一数据时没有用uniq! 很有用。

Ruby:根据任意数字列表将舍入数字降至最接近的数字

假设我有一个整数数组: arr = [0,5,7,8,11,16] 我有另一个整数: n = 6 我需要一个向下舍入到数组中最接近的数字的函数: foo(n) #=> 5 如您所见,数字没有固定的模式。 这是一种优雅的方式吗? 谢谢

Ruby Array – 使用next和before元素进行反向迭代

如何使用当前元素的next和before元素反向迭代一个数组? 是否可以将each_cons与reverse_each一起使用?

Ruby group_by对象?

我有一个数组或不同的对象,我想按对象分组。 例如 => [#, #, #, #] all.size => 4 我试过了 all.group_by(Object) 但这没有用……关于如何在一个数组中分组对象的任何想法?