【问题标题】:Count from list in ruby从红宝石列表中计数
【发布时间】:2026-02-06 10:20:05
【问题描述】:

我认为这是正确的,但可能是错误的。

我有一个这样格式化的字符串 姓名、姓名1、姓名2、姓名3、姓名4等

admins_count = 0
if ["name2", "name3"].include?(player_list)
  admins_count += 1
end

这是计算列表中匹配项的正确方法吗?

本质上,它是一个玩家列表,我想根据 player_list 计算第二个列表中有多少个名字。

这就是对我有用的组合

player_list = response[3].split(" ", 2)[1].chomp[1..-2]
admin_list = "Howard_Roark, Gerrit8500, fffizzz"
mod_list = "ZionRx, rodtang, fuzzamuzza, DJRedFlames, bingbong2715, ErebusAnima, Twentytenor2, zephyrnug, Tiberione, deadkill02, tTheoRyy, PyneApll, tercept, Hestehaven, Orjis87, Yaltar101"

mod_arr = mod_list.split(", ")
admin_arr = admin_list.split(", ")
player_arr = player_list.split(", ")

mods_count = 0
mod_arr.each do |s|
        mods_count += 1 if player_arr.include? s
end

admins_count = 0
admin_arr.each do |s1|
        admins_count += 1 if player_arr.include? s1
end

puts "players.value #{player_count}"
puts "mods.value #{mods_count}"
puts "admins.value #{admins_count}"

【问题讨论】:

  • player_list 是什么?一个字符串?一个字符串数组?
  • 您是否有一个 字符串 作为 "name, name1, name2" 或者您是否有一个 字符串数组 例如 ["name", "name1", "name2"]?另外,player_list 是什么?您究竟希望实现什么?请给我们更多信息!
  • player_list 是来自数组 player_list = response[3].split(" ", 2)[1].chomp[1..-2]---------的字符串---- 话虽如此,player_list 的输出与上面描述的完全一样 name1, name2, name3, name4, name5。我需要检查该列表并计算第二个列表中的匹配项。

标签: ruby list count


【解决方案1】:

我认为这是你想要的更多:

formatted_string = "name,name1,name2,name3,name4";
string_arr = formatted_string.split(",")

string_arr.each do |s|
   admin_count += 1 if player_list.include? s
end

【讨论】:

  • string_arr.count {|s| player_list.include? s }
【解决方案2】:

如果player_list 是一个数组,您可以使用& operator。它需要两个数组并返回一个新数组,该数组仅包含两个数组共有的项(没有重复项)。

# I'm assuming player_list becomes a string of 'name1, name2, name3...' after 
# the 'chomp' method
player_list = response[3].split(" ", 2)[1].chomp[1..-2].split(",").map(&:strip)
admins_count = (["name2", "name3"] & player_list).size

所以,如果player_list 包含“name2”,那么它将返回["name2"]。然后我们调用.size,我们会得到1,它会被分配给admins_count

【讨论】:

  • 我想从格式化字符串 vs player_list 中返回匹配计数,而不是匹配本身。它是我试图修改的一个 munin 插件,我对 ruby​​ 一无所知,对于菜鸟问题​​感到抱歉。
  • 这就是表达式末尾的size() 中的表达式将返回匹配项,然后在匹配数组上调用 .size 以获取其中的项目数。
  • 我在尝试这个时遇到了一个解析错误,让我重新设置它并发布它。关于 &
  • :in `&': can't convert String into Array (TypeError)
  • 啊,我读到了您关于它是来自数组的字符串的评论,在这种情况下,您应该使用@Hunter 对.split(",") 将字符串添加到数组中的方式。甚至可以在其上使用.strip 以消除任何空白。数组确实是比较两组项目的最佳方式。