gpt4 book ai didi

ruby - 如何重构复杂的if语句ruby

转载 作者:太空宇宙 更新时间:2023-11-03 16:24:37 24 4
gpt4 key购买 nike

现在我有 if 语句问题,输入.txt

大雄,suneo,1992,1990,15-21,19-21
巨人,sizuka,1120,1210,13-21
铜锣烧,苹果,1147,989,21-19,13-21,21-4

有时有2轮,有时是 3 轮,或者有时是无效的轮数(例如 1 轮或更多轮比 3).

这是我的代码

require 'csv'

CSV.foreach('input.txt', col_sep: ',') do |row|
name1, name2, ro1, ro2 = row
unless row[4]
puts "no first-round match for #{name1} and #{name2}"
else
match1 = row[4]
m1score1, m1score2 = row[4].split('-')
if m1score1 > m1score2
p "Match 1 #{name1} Win, #{name2} Lose"
end
end

unless row[5]
puts "there is no second round match for #{name1} v #{name2}"
else
match2 = row[5]
m2score1, m2score2 = row[5].split('-')
if m2score1 > m2score2
p "Match 2 #{name1} Win, #{name2} Lose"
end
end

unless row[6]
puts "no third-round match for #{name1} and #{name2}"
else
match3 = row[6]
m3score1, m3score2 = row[6].split('-')
if m3score1 > m3score2
p "Match 3 #{name1} Win, #{name2} Lose"
end
end
end

我必须做什么才能简化 if 语句?

最佳答案

输入必须是 CSV 吗?由于行的长度不同,我建议使用不同的结构,如 json 或其他结构(如果可能)。

如果它必须是 CSV,但您可以假设具有特定长度的行将始终具有该长度的正确数据,那么您可以只查看该行的长度以了解您应该做什么。

例如,您的行的长度分别为 6、5、7。如果长度为 6 的行始终具有相同顺序的数据,那么您可以这样做

require 'csv'

CSV.foreach('input.txt', col_sep: ',') do |row|
DataHandler.handle(row)
end

class DataHandler
def self.handle(row)
case row.length
when 5
# do stuff when a row has 5 cols
when 6
# do stuff when a row has 6 cols
when 7
# do stuff when a row has 7 cols
end
end
end

例如,如果您缺少内柱,就会出现此问题。在这种情况下,最好使用占位符使它们的长度都相同,例如

apple, ball, cat, 123, 456
thing, this, , 678, 543
other, blah, dog, ,

关于ruby - 如何重构复杂的if语句ruby,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27383274/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com