我有这个代码,将日期字符串数组从2011年11月17日格式转换为11/17/11:
def date_convert dates
  months = { 'Jan' => 1, 'Feb' => 2, 'Mar' => 3, 'Apr' => 4, 
             'May' => 5, 'Jun' => 6, 'Jul' => 7, 'Aug' => 8, 
             'Sep' => 9, 'Oct' => 10, 'Nov' => 11, 'Dec' => 12 }
  new_dates = []
  dates.each do |date|
    date_split = date.split('-')
    month = months[date_split[1]] 
    day = date_split[0]
    year = date_split[2][-2, 2]
    new_dates.push ("#{month}/#{day}/#{year}")
  end
  new_dates
end
Run Code Online (Sandbox Code Playgroud)
是否有更好的,可能内置的方式来使用Ruby进行这种转换?我正在学习Ruby,所以任何其他方法都会非常感激.
原始问题
设d(n)定义为n的适当除数之和(小于n的数均匀分成n).如果d(a)= b并且d(b)= a,其中ab,则a和b是友好对,并且a和b中的每一个被称为友好数字.
例如,220的适当除数是1,2,4,5,10,11,20,22,44,55和110; 因此d(220)= 284. 284的适当除数是1,2,4,71和142; 所以d(284)= 220.
评估10000以下所有友好数字的总和.
我通过生成1到10000之间的所有数字的哈希值和它们对应的除数和(即hash [220] = 284)来解决了这个问题.然后我将散列中的项目与散列的副本进行比较......无论如何,它都有效,但需要很长时间.我怎样才能让它更快?
def proper_divs_sum num
  divs = [1]
  for i in 2..((num/2) + 1)
    if num % i == 0
      divs.push i
    end
  end
  divs_sum = 0
  divs.each do |div|
    divs_sum += div
  end
  return divs_sum
end
def n_d_hash_gen num
  nd_hash = {}
  for i in 1..num
    nd_hash[i] = proper_divs_sum(i)
  end
  return nd_hash
end
def amicables num
  amicable_list = []
  hash1 = n_d_hash_gen(num)
  hash2 = n_d_hash_gen(num)
  hash1.each …Run Code Online (Sandbox Code Playgroud) 我最初将此代码编写为一系列if语句,但在了解了更多关于Ruby的决定之后,决定一个case语句可能更合适.然而,现在它似乎被打破了,我不知道为什么.
location = gets.chomp.downcase
case location
when 'v' || 'vaca'
  file1, file2 = 'vMasterLocation.csv', 'vMasterSR.csv'
when 'c' || 'comm'
  file1, file2 = 'cMasterLocation.csv', 'cMasterSR.csv'
else
  puts "Not a valid location."
  exit
end
Run Code Online (Sandbox Code Playgroud)
声明运行正常时location的输入或者是V,v,C,或c,但每当我试着输入vaca或comm红宝石返回以下内容:csv.rb:1335:in 'initialize': can't convert nil into String (TypeError)
我使用||不正确或者我误解了案例陈述吗?任何反馈都非常感谢.谢谢!
这里它的形式if仅作为参考:
location = gets.chomp.downcase
if location == 'v' || location == 'vaca'
  file1, file2 = 'vMasterLocation.csv', …Run Code Online (Sandbox Code Playgroud)