将数字转换为星期几-Ruby

将数字转换为星期几-Ruby,ruby,Ruby,我有以下数据: data = [{"day":0,"count":1.0},{"day":1,"count":1.1666666666666667},{"day":2,"count":2.625},{"day":3,"count":2.0},{"day":4,"count":3.8},{"day":5,"count":1.2},{"day":6,"count":41.666666666666664}] 我试过两种不同的方法,但都不明白。是否有办法将天整数转换为一周中的某一天(例如,“Sunda

我有以下数据:

data = [{"day":0,"count":1.0},{"day":1,"count":1.1666666666666667},{"day":2,"count":2.625},{"day":3,"count":2.0},{"day":4,"count":3.8},{"day":5,"count":1.2},{"day":6,"count":41.666666666666664}]
我试过两种不同的方法,但都不明白。是否有办法将天整数转换为一周中的某一天(例如,“Sunday”为0),然后将其从周一开始,这样最终结果将是:

[{"day":"Monday","count":1.1666666666666667},{"day":"Tuesday","count":2.625},{"day":"Wednesday","count":2.0},{"day":"Thursday","count":3.8},{"day":"Friday","count":1.2},{"day":"Saturday","count":41.666666666666664}, {"day":"Sunday","count":1.0}]

提前感谢您的帮助。

您可以在日期模块中使用预定义的
日名
数组

require 'date'
data.map! { |element| element[:day] = Date::DAYNAMES.rotate[element[:day]] }

这将把你的整数转换成一个命名的日期,从星期一开始为零。

你可以在日期模块中使用预定义的
日名数组

require 'date'
data.map! { |element| element[:day] = Date::DAYNAMES.rotate[element[:day]] }

这将把你的整数转换成一个命名的日期,从星期一开始为零。

我想你要找的是

require 'json'
require 'date'

data = '[{"day":0,"count":1.0},{"day":1,"count":1.1666666666666667},{"day":2,"count":2.625},{"day":3,"count":2.0},{"day":4,"count":3.8},{"day":5,"count":1.2},{"day":6,"count":41.666666666666664}]'

dates = JSON.parse(data).rotate.map do |hsh| 
          week_day = Date::DAYNAMES[hsh["day"]]
          { "day" => week_day, "count" => hsh["count"]  }
        end

puts dates.to_json

#=> [{"day":"Monday","count":1.1666666666666667},{"day":"Tuesday","count":2.625},{"day":"Wednesday","count":2.0},{"day":"Thursday","count":3.8},{"day":"Friday","count":1.2},{"day":"Saturday","count":41.666666666666664},{"day":"Sunday","count":1.0}]

我想你要找的是

require 'json'
require 'date'

data = '[{"day":0,"count":1.0},{"day":1,"count":1.1666666666666667},{"day":2,"count":2.625},{"day":3,"count":2.0},{"day":4,"count":3.8},{"day":5,"count":1.2},{"day":6,"count":41.666666666666664}]'

dates = JSON.parse(data).rotate.map do |hsh| 
          week_day = Date::DAYNAMES[hsh["day"]]
          { "day" => week_day, "count" => hsh["count"]  }
        end

puts dates.to_json

#=> [{"day":"Monday","count":1.1666666666666667},{"day":"Tuesday","count":2.625},{"day":"Wednesday","count":2.0},{"day":"Thursday","count":3.8},{"day":"Friday","count":1.2},{"day":"Saturday","count":41.666666666666664},{"day":"Sunday","count":1.0}]

您显示的
数据
变量实际上是
JSON
,这意味着您必须
要求“JSON”
,以便ruby能够解析它

接下来,我们
需要“date”
,以便我们可以使用ruby将您的天数从数字转换为文字

最后,我们将
数据
对象转换回
JSON
,以便您可以按预期方式使用它

require 'date'
require 'json'

day = Proc.new { |d| Date::DAYNAMES[d] }

data = '[ {"day":0,"count":1.0},
          {"day":1,"count":1.1666666666666667},
          {"day":2,"count":2.625},
          {"day":3,"count":2.0},
          {"day":4,"count":3.8},
          {"day":5,"count":1.2},
          {"day":6,"count":41.666666666666664} ]'

new_data = JSON.parse(data).map do |n| 
  { "day" => day.call(n["day"]), "count" => n["count"]  }.to_json
end

puts new_data

您显示的
数据
变量实际上是
JSON
,这意味着您必须
要求“JSON”
,以便ruby能够解析它

接下来,我们
需要“date”
,以便我们可以使用ruby将您的天数从数字转换为文字

最后,我们将
数据
对象转换回
JSON
,以便您可以按预期方式使用它

require 'date'
require 'json'

day = Proc.new { |d| Date::DAYNAMES[d] }

data = '[ {"day":0,"count":1.0},
          {"day":1,"count":1.1666666666666667},
          {"day":2,"count":2.625},
          {"day":3,"count":2.0},
          {"day":4,"count":3.8},
          {"day":5,"count":1.2},
          {"day":6,"count":41.666666666666664} ]'

new_data = JSON.parse(data).map do |n| 
  { "day" => day.call(n["day"]), "count" => n["count"]  }.to_json
end

puts new_data

您可以使用ruby 1.9哈希语法将符号作为键,但将字符串作为键。因此,要么丢失
“day”
“count”
周围的所有引号,并使它们
日期:0,计数:1.0
同时确保冒号后面有空格。或者使用老式的
“day”=>0,“count”=>1.0
。它是无效的
ruby
,因为它是
JSON
@user2270029这个代码是如何使用的?提供更多的背景知识,以便根据您的工作环境定制答案。有多种方法可以做到这一点,下面的答案只适用于哈希和JSON之间的一些转换。因此,要么丢失
“day”
“count”
周围的所有引号,并使它们
日期:0,计数:1.0
同时确保冒号后面有空格。或者使用老式的
“day”=>0,“count”=>1.0
。它是无效的
ruby
,因为它是
JSON
@user2270029这个代码是如何使用的?提供更多的背景知识,以便根据您的工作环境定制答案。有多种方法可以做到这一点,下面的答案只适用于哈希和JSON之间的一些转换。它给了我这个结果[“星期一”、“星期二”、“星期三”、“星期四”、“星期五”、“星期六”,null]对于这个错误,我深表歉意。我错了;指数从零开始。现在修复答案。添加rotate将允许常量数组在星期一开始,而不是您希望的星期天。它将为我提供此结果[“星期一”、“星期二”、“星期三”、“星期四”、“星期五”、“星期六”,null]对于此错误,我深表歉意。我错了;指数从零开始。现在修复答案。添加旋转将允许常量数组在周一开始,而不是您希望的周日。