从红宝石列表中算出

时间:2012-06-28 16:10:16

标签: ruby list count

我认为这是正确的,但可能已经过了。

我有一个格式化的字符串 name,name1,name2,name3,name4等

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}"

2 个答案:

答案 0 :(得分:1)

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

# 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

答案 1 :(得分: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