小编Car*_*and的帖子

在Ruby中,获取数组中最大值索引的最简洁方法是什么?

如果a是数组,我想要a.index(a.max),但更像Ruby的东西.这应该是显而易见的,但我无法在其他地方找到答案.显然,我是Ruby的新手.

ruby arrays indexing max

52
推荐指数
4
解决办法
2万
查看次数

一个哈希中有多个子哈希

我有一个哈希:

hash = {"a_1_a" => "1", "a_1_b" => "2", "a_1_c" => "3", "a_2_a" => "3",
        "a_2_b" => "4", "a_2_c" => "4"}
Run Code Online (Sandbox Code Playgroud)

获得以下子哈希的最佳方法是什么:

[{"a_1_a" => "1", "a_1_b" => "2", "a_1_c" => "3"},
 {"a_2_a" => "3", "a_2_b" => "4", "a_2_c" => "4"}]
Run Code Online (Sandbox Code Playgroud)

我希望它们基于正则表达式按键分组/^a_(\d+)/.我将在原始哈希中拥有50多个键/值对,因此如果有人有任何建议,动态的东西最有效.

ruby regex hash

6
推荐指数
1
解决办法
78
查看次数

分层使用细化

精化是对v2.0的实验性补充,然后在v2.1中进行了修改并永久化.它提供了一种通过提供"在本地扩展类的方法"来避免"猴子修补"的方法.

我试图申请Refinements这个最近的问题,我将因此简化:

a = [[1, "a"],
     [2, "b"],
     [3, "c"],
     [4, "d"]]

b = [[1, "AA"],
     [2, "B"],
     [3, "C"],
     [5, "D"]]
Run Code Online (Sandbox Code Playgroud)

在位置的元素ia的元素相匹配的偏移ib,如果:

a[i].first == b[i].first
Run Code Online (Sandbox Code Playgroud)

a[i].last.downcase == b[i].last.downcase
Run Code Online (Sandbox Code Playgroud)

换句话说,字符串的匹配与大小写无关.

问题是确定a匹配相应元素的元素数量b.我们看到答案是两个,即抵消的元素12.

一种方法是使用Monkey-patch String#==:

class String
  alias :dbl_eql :==
  def ==(other)
    downcase.dbl_eql(other.downcase)
  end
end

a.zip(b).count { |ae,be| ae.zip(be).all? { |aee,bee| aee==bee } }
  #=> 2
Run Code Online (Sandbox Code Playgroud)

或者改为使用Refinements: …

ruby refinements

5
推荐指数
1
解决办法
124
查看次数

在 ruby​​ 反向字符串中不影响字符串中的数字并且不使用正则表达式

给定一个包含字母和数字的字符串,我希望返回一个包含重新排列的字母而不影响数字位置的字符串。字符串中的第 i字母将成为返回字符串中的i-from-last 字母。不能使用正则表达式。

示例:如果给定的字符串是

"hello123wor63ld"
Run Code Online (Sandbox Code Playgroud)

字符串

"dlrow123oll63eh"
Run Code Online (Sandbox Code Playgroud)

应该被退回。

我找到了一个使用正则表达式的解决方案,但不知道如何在不使用正则表达式的情况下解决问题。

ruby

4
推荐指数
1
解决办法
200
查看次数

为什么Ruby的ri不会返回bash命令提示符?

当我在Mac上的终端上执行ri ...时,我得到50个空行,然后是我期待的输出,然后是最后一行:

(结束)

,(END)在黑色背景上显示白色字母.我没有回到bash,但是 - ri仍在运行,我无法输入任何东西.还有,为什么所有的空白行?

为什么会这样?

ruby macos terminal ri

3
推荐指数
1
解决办法
657
查看次数

理解两个求和 leetcode 问题 (Ruby)

我正在研究Leetcode Two Sums问题:“给定一个整数数组,返回两个数字的索引,使它们相加为特定目标。”。这就是我所拥有的:

def two_sum(nums, target)
  hash = {}
  nums.each_with_index do |num, index|
    diff = target - num
    if hash[diff]
      return [hash[diff],index]
    else
      hash[num] = index
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

该代码有效,但是,我不太确定为什么会这样。

所以我明白,在每个语句中,它遍历数字并找到差异。例如,

nums = [4,2,5,1]
target = 6
Run Code Online (Sandbox Code Playgroud)

在第一个循环中,差异是 6-2 = 4。但是哈希显然是空的,因此它将注册 num 作为键,以当前索引作为值。因此哈希是,

hash = {
  4: 0
}
Run Code Online (Sandbox Code Playgroud)

在第二个循环中,差异是 6-4 = 2。hash[4] 为 nil,因此它将当前 num 和 index 添加到字典中。

hash = {
  4: 0
  2: 1
}
Run Code Online (Sandbox Code Playgroud)

像这样,这不会继续将 nums 添加到哈希中,因为至少在这种情况下没有匹配的键值对吗?

也许我把事情复杂化了。如果有人可以 eli5,我将不胜感激。谢谢!

ruby

3
推荐指数
1
解决办法
92
查看次数

Rails 将数组合并为数组的数组

我是 Ruby on Rails 的新手,我遇到了一个奇怪的数组情况,我无法弄清楚如何有效执行。

我有这个起始数组:

[["6884", true], ["8456", false], ["5631", false]]
Run Code Online (Sandbox Code Playgroud)

然后我有另一个一维数组:

["6884", "8023", "9837"]
Run Code Online (Sandbox Code Playgroud)

我想通过将值附加到二维数组中相同索引处的数组末尾,将一维数组合并到数组数组中。

所以最终的产品应该是:

[["6884", true, "6884"], ["8456", false, "8023"], ["5631", false, "9837]]
Run Code Online (Sandbox Code Playgroud)

因此,一维数组中索引 0 处的值将附加到二维数组中索引 0 处的数组末尾,对于一维数组中的每个元素依此类推。有没有一种简单的 Ruby 方法可以实现这一点?

ruby

2
推荐指数
2
解决办法
159
查看次数

用其他两个数组中的值替换数组中的nil元素

我有三个数组:g,ab.g有两组一个或多个连续nil值.第一个(第二个)组包含a.size(b.size)nils.我要替换的每个nil与相应的元件中的第一(第二)组中的a(b).例如,如果:

g = [1, 2, nil, nil, nil, 3, nil, nil, nil, nil]
a = [55, 45, 56]
b = [100, 200, 300, 400]
Run Code Online (Sandbox Code Playgroud)

我希望g成为:

 [1, 2, 55, 45, 56, 3, 100, 200, 300, 400]
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

ruby arrays

1
推荐指数
1
解决办法
297
查看次数

是什么导致了这里的问题?

当我在 ruby​​ 中运行此代码时:

updated_users = []
users = [{:name => "sam" , :number => 001 }]
ids = ["aa" , "bb" , "cc"]
 
users.each do |user|
  ids.each do |id|
    user[:guid] = id
    updated_users << user
  end       
end

p updated_users
Run Code Online (Sandbox Code Playgroud)

我得到:

[{:name=>"sam", :number=>1, :guid=>"cc"},
 {:name=>"sam", :number=>1, :guid=>"cc"},
 {:name=>"sam", :number=>1, :guid=>"cc"}]
Run Code Online (Sandbox Code Playgroud)

我希望得到:

[{:name=>"sam", :number=>1, :guid=>"aa"},
 {:name=>"sam", :number=>1, :guid=>"bb"},
 {:name=>"sam", :number=>1, :guid=>"cc"}]
Run Code Online (Sandbox Code Playgroud)

发生了什么,我应该如何获得所需的输出?

ruby arrays hash

1
推荐指数
1
解决办法
75
查看次数

一种阵列的方法

为此编写方法最简洁明了的方法是什么?

给定一个a数字和数字的数组n,找到其总和最大的n连续元素a.

返回组中第一个元素的最大总和和索引.

例如,使用a = [1, 1, 1, 1, 1, 1, 1, 2]n = 2,结果将是总和3和位置6.

ruby arrays

0
推荐指数
1
解决办法
73
查看次数

标签 统计

ruby ×10

arrays ×4

hash ×2

indexing ×1

macos ×1

max ×1

refinements ×1

regex ×1

ri ×1

terminal ×1