代码之家  ›  专栏  ›  技术社区  ›  Nilay Singh

从数字创建范围

  •  0
  • Nilay Singh  · 技术社区  · 6 年前

    我有一个包含数字的哈希数组:

     [
        {
        y: 316.28,
        label: "Kaimur",
        color: "Light_Green"
        },
        {
        y: 323.63,
        label: "Banka",
        color: "Light_Green"
        },
        {
        y: 327.85,
        label: "Gaya",
        color: "Light_Green"
        },
        {
        y: 346.11,
        label: "EastChamparan",
        color: "Light_Green"
        },
        {
        y: 358.38,
        label: "Nalanda",
        color: "Light_Green"
        },
        {
        y: 363.13,
        label: "Madhubani",
        color: "Light_Green"
        }
    ]
    

    这是我的第一个号码 316.28 最后一个数字是 363.13 . 我想从这个数组创建范围 300 to 400 . 这是一个使用数组的第一个和最后一个元素的示例。

    我想让它像 300到400 100 to 200 10 to 20 .

    如果我的号码是 三百一十六点二八 ,我想返回一个值 300 如果我的价值是 三百六十三点一三 ,然后它应该返回 400 .

    我该怎么做?

    如果数组列表中有三个数字2或四个数字,例如 12.5 , 123.45 3900.56 . 这些可以是数字,我的所有数组都可以有这些数字。如果在找到一个长度后我必须对每个数字进行取整,那将是一场噩梦。我需要一个能发挥作用的功能。

    1 回复  |  直到 6 年前
        1
  •  6
  •   Aleksei Matiushkin    6 年前

    使用 Float#round 带有否定论点:

    316.28.round(-2)
    #⇒ 300
    363.13.round(-2)
    #⇒ 400
    

    input = _
    #⇒ [{:y=>316.28, :label=>"Kaimur", :color=>"Light_Green"},
    #   {:y=>323.63, :label=>"Banka", :color=>"Light_Green"},
    #   {:y=>327.85, :label=>"Gaya", :color=>"Light_Green"},
    #   {:y=>346.11, :label=>"EastChamparan", :color=>"Light_Green"},
    #   {:y=>358.38, :label=>"Nalanda", :color=>"Light_Green"},
    #   {:y=>363.13, :label=>"Madhubani", :color=>"Light_Green"}]
    ys = input.map { |e| e[:y] }
    #⇒ [316.28, 323.63, 327.85, 346.11, 358.38, 363.13]
    Range.new *[ys.min, ys.max].map { |e| e.round(-e.round.to_s.length+1) }
    #⇒ 300..400