相关疑难解决方法(0)

Ruby:如何在数组中查找并返回重复值?

arr是字符串数组,例如:["hello", "world", "stack", "overflow", "hello", "again"].

什么是简单而优雅的方法来检查是否arr有重复,如果是,则返回其中一个(无论哪个).

例子:

["A", "B", "C", "B", "A"]    # => "A" or "B"
["A", "B", "C"]              # => nil
Run Code Online (Sandbox Code Playgroud)

ruby arrays

155
推荐指数
12
解决办法
10万
查看次数

将数组拆分为(element =>剩余元素)对的方法

给定一个数组文字,我想创建一个哈希,其中键是数组中的元素,值是包含其他/剩余元素的数组.

输入:

[1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

输出:

{1=>[2, 3], 2=>[1, 3], 3=>[1, 2]}
Run Code Online (Sandbox Code Playgroud)

如果我引入变量很容易:

arr = [1, 2, 3]
arr.map { |i| [i, arr - [i]] }.to_h
Run Code Online (Sandbox Code Playgroud)

但是使用数组文字,我能想出的唯一解决方案涉及instance_exec或者instance_eval看起来像是hackish:

[1, 2, 3].instance_exec { map { |i| [i, self - [i]] } }.to_h
Run Code Online (Sandbox Code Playgroud)

我是否忽略了内置方法或明显的解决方案?group_by,combination,permutationpartition似乎并没有帮助.

ruby

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

计算数组中的匹配元素

给定两个大小相等的数组,如何找到匹配元素的数量而忽略位置?
例如:

  1. [0,0,5]并且[0,5,5]会返回一个匹配,2因为有一个0和一个5共同点;
  2. [1,0,0,3]并且[0,0,1,4]会返回一个匹配,3因为有两个匹配0和一个匹配1;
  3. [1,2,2,3]并且[1,2,3,4]将返回匹配的3.

我尝试了很多想法,但它们都倾向于变得相当粗糙和复杂.我猜这里有一些很好的Ruby习惯用法,或者也许是一个正则表达式,可以很好地回答这个解决方案.

ruby arrays

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

Ruby 数组中的差异(包括重复项)

[1,2,3,3] - [1,2,3]产生空数组[]。是否可以保留重复项以便返回[3]

ruby

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

如何检查数组中的所有元素是否出现不超过两次?

我正在使用Ruby 2.4.假设我有一个字符串数组(这些字符串都是字符串式的(这是一个字?)整数...

["1", "2", "5", "25", "5"]
Run Code Online (Sandbox Code Playgroud)

如何编写一个函数来告诉我数组中的所有元素是否在数组中出现的次数不超过两次?例如,这个数组

["1", "3", "3", "55", "3", "2"]
Run Code Online (Sandbox Code Playgroud)

将返回false因为"3"发生三次,但这个数组

["20", "10", "20", "10"]
Run Code Online (Sandbox Code Playgroud)

会返回,true因为没有一个元素出现超过两次.

ruby arrays

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

在 Ruby 数组中查找重复项

我试图在 1 到 1000000 之间的字符串数组中查找重复值。

但是,使用我拥有的代码,我得到的输出是所有条目都加倍了。

例如,如果我有[1,2,3,4,3,4],它会给我输出 3 4 3 4 而不是 3 4。

这是我的代码:

array = [gets]

if array.uniq.length == array.length
  puts "array does not contain duplicates"
else
  puts "array does contain duplicates"
  print array.select{ |x| array.count(x) > 1}
end
Run Code Online (Sandbox Code Playgroud)

另外,每次测试代码时,我都必须将数组定义为array = [1,2,3,4,5,3,5]. 可以puts工作,但当我使用数组 [gets] 时它不会打印。

有人可以帮助我如何解决这两个问题吗?

ruby arrays

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

保持Ruby中重复元素的数组之间的差异

我是Ruby的新手,并且希望能够在两个数组之间找到差异.

我知道通常的方法:

a = [...]
b = [...]
difference = (a-b)+(b-a)
Run Code Online (Sandbox Code Playgroud)

但问题在于这是计算集合的差异,因为在ruby中,语句(a-b)定义了相对于b的集合恭维.

这意味着[1,2,2,3,4,5,5,5,5] - [5]= [1,2,2,3,4],因为它取出了第一组中出现的所有5个,而不仅仅是一个,表现得像数据上的过滤器.

我希望它只删除一次差异,例如,差异[1,2,2,3,4,5,5,5,5],并且[5]应该只[1,2,2,3,4,5,5,5]删除一个5.

我可以迭代地做到这一点:

a = [...]
b = [...]

complimentAbyB = a.dup
complimentBbyA = b.dup

b.each do |bValue|
  complimentAbyB.delete_at(complimentAbyB.index(bValue) || complimentAbyB.length)
end
a.each do |aValue|
  complimentBbyA.delete_at(complimentBbyA.index(aValue) || complimentBbyA.length)
end

difference = complimentAbyB + complimentBbyA
Run Code Online (Sandbox Code Playgroud)

但这看起来非常冗长和低效.我不得不想象有一个更优雅的解决方案.所以我的问题基本上是,找到两个数组的差异的最优雅的方法是什么,如果一个数组出现单个元素然后另一个数组,它们将不会被删除?

ruby arrays difference

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

如何在 Ruby 中找到字符串的第一个非重复字母?

我有一个字符串"teststring"。我想在 Ruby 中找到第一个非重复出现的字符。

我有这个 Python 代码:

def first_non_repeat_character(teststring)
    unique=[]
    repeated=[]
    for character in teststring:
        if character in unique:
            unique.remove(character)
            repeated.append(character)
        else:
            if not character in repeated:
                unique.append(character)
    if len(unique):
        return unique[0]
    else: 
        return false
Run Code Online (Sandbox Code Playgroud)

ruby string

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

ruby 从数组中删除一个元素

我想从数组中按值删除(仅一个)元素。

例子 :

x = [1,2,3,2]
x.remove(2)


result: x= [1,3]
Run Code Online (Sandbox Code Playgroud)

但是,我想得到[1,3,2]

谢谢

ruby ruby-on-rails

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

返回字符串中重复的字母数的函数

试图创建一个函数来计算字符串中不止一次出现的字母数(不一定在一起,而不是它们重复的次数).这就是我所拥有的:

def num_repeats(string)

    repeat = []

    i1 = 0
    i2 = 1
    while i1 < string.length 
        while  i2 < string.length
            if (string[i1] == string[i2]) && (!repeat.include? string[i1]) 
                repeat << string[i1]
            end
            i2 +=1
        end 
        i1+=1
    end

    return repeat.length
end

puts(num_repeats('sldhelanlaskjkajksda'))
Run Code Online (Sandbox Code Playgroud)

出于某种原因,如果在字符串的其余部分中使用了第一个字母,它只会推送字符串的第一个字母,但在此之后,似乎该方法会停止循环遍历字符串的其余部分.

我想首先了解为什么当前的代码不起作用,如果有办法解决它,我也欢迎其他更好的解决方案.

ruby

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

如何在 Ruby 中为正则表达式字符串匹配生成百分比?

我正在尝试构建一个简单的方法来查看数据库中大约 100 个条目的姓氏,并提取出所有匹配超过特定字母百分比的条目。我目前的做法是:

  1. 从数据库中提取所有 100 个条目到一个数组中
  2. 在执行以下操作时遍历它们
  3. 将姓氏拆分为字母数组
  4. 从另一个包含我尝试匹配的名称字母的数组中减去该数组,只留下不匹配的字母。
  5. 取结果的大小并除以步骤 3 中数组的原始大小,得到一个百分比。
  6. 如果百分比高于预定义的阈值,则将该数据库对象推送到结果数组中。

这有效,但我觉得必须有一些很酷的 ruby​​/regex/active record 方法可以更有效地执行此操作。我用谷歌搜索了很多,但找不到任何东西。

ruby regex arrays activerecord

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

标签 统计

ruby ×11

arrays ×6

activerecord ×1

difference ×1

regex ×1

ruby-on-rails ×1

string ×1