首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何比较3/4匹配的字符串

如何比较3/4匹配的字符串
EN

Stack Overflow用户
提问于 2017-07-11 20:00:18
回答 1查看 58关注 0票数 1

需要将数组中的数字与“获胜”数字进行比较。但我得看看四场比赛中是否有三场。我的号码是"1234“,winning=是”4356“、"8312”、"4820“、"7623”。在这种情况下,"8312“应该警告胜利,因为他们有12和3的共同点。我必须在单元测试中定义数字,然后在一个单独的文件中编写一个函数,然后将该函数传递回单元测试。任何帮助都将不胜感激。我已经写了一个函数和测试,比较一个精确的匹配,并且不知道下一步要做什么。

function_file

代码语言:javascript
运行
复制
 def match(my_num,arr)
  matches = []
  arr.each_with_index do |v,i|
     if my_num == v
        matches << my_num
     end
   end
  matches
end     

test_file

代码语言:javascript
运行
复制
require "minitest/autorun"
require_relative "close_but_no_func.rb"

class TestWinningNumbers < Minitest::Test
    def test_1_equals_1
        assert_equal(10-5, 3+2)
    end
    def test_winning_num
        my_num = "1134"
        arr=["6028","2088","3058","3476","8740","1134"]
        assert_equal(["1134"], match(my_num, arr))
    end     
end
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-11 21:21:37

让我们把这个问题分成两个独立的问题。

  1. 您需要一个计算匹配字符数量的函数。
  2. 如果这些字符串有足够的匹配字符,那么您希望将它们收集在一起。

例如,您可以编写一个函数来检查这两个字符串的匹配字符数。

代码语言:javascript
运行
复制
def count_matching_chars(str1,str2)
  # counts how many characters of str1 appear in str2
  matching_chars_count = 0
  str1.each_char do |char| 
    matching_chars_count += 1 if str2.include?(char)
  end
  matching_chars_count
end

puts count_matching_chars("1234", "1134") => 3
puts count_matching_chars("1111", "1134") => 4
puts count_matching_chars("1234", "1111") => 1

这里的一个忽略了定位,它只检查str1中有多少字符与str2的一个字符匹配。

现在,您可以轻松地在数组中收集这些数字。

代码语言:javascript
运行
复制
def matches(my_num, arr)
  result = []
  arr.each do |num|
    result << arr if count_matching_chars(my_num,num) >= 3
  end
  result
end

您可以使用枚举数函数(如countselect ),以更紧凑的方式编写这两个函数。

代码语言:javascript
运行
复制
def count_matching_chars(str1,str2)
  str1.each_char.count do |char| 
    str2.include?(char)
  end
end

def matches(my_num, arr)
  arr.select do |num|
    return true if count_matching_chars(num,my_num) >= 3
  end
end

或者你把所有的东西组合成一个函数

代码语言:javascript
运行
复制
def matches(my_num, arr)
  arr.select do |num|
    true if my_num.each_char.count { |char| num.include?(char)} >= 3
  end
end

现在,如果你只想检查一下,它是否是一个中奖号码。一旦找到匹配项,您只需返回true

代码语言:javascript
运行
复制
def winning_number?(my_num, arr)
  arr.select do |num|
    return true if my_num.each_char.count { |char| num.include?(char)} >= 3
  end
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45043534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档