You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按色相(Hue)对十六进制(hex)颜色列表进行排序?

按色相为十六进制颜色排序的Ruby实现

要给你哈希里的十六进制颜色按色相排序,核心思路是先把十六进制颜色转换成**色相(Hue)**值,再基于这个值对哈希条目进行排序。下面是具体的实现方案:

步骤1:实现十六进制转色相的辅助方法

首先我们需要一个工具方法,把十六进制颜色字符串转换成0-360范围的色相值:

def hex_to_hue(hex)
  # 移除颜色字符串里的#号,确保是标准6位十六进制格式
  hex_clean = hex.delete('#')
  # 把十六进制转成0-1范围的RGB值
  r = hex_clean[0..1].to_i(16) / 255.0
  g = hex_clean[2..3].to_i(16) / 255.0
  b = hex_clean[4..5].to_i(16) / 255.0

  max_rgb = [r, g, b].max
  min_rgb = [r, g, b].min
  delta = max_rgb - min_rgb

  hue = 0
  # 只有非灰度色需要计算色相,灰度色(delta=0)色相固定为0
  if delta != 0
    case max_rgb
    when r
      hue = ((g - b) / delta) * 60
    when g
      hue = ((b - r) / delta) * 60 + 120
    when b
      hue = ((r - g) / delta) * 60 + 240
    end
  end
  hue % 360 # 确保色相值在0-360区间内
end

步骤2:基于色相排序哈希

接下来用这个辅助方法对你的原始哈希进行排序:

# 你的原始颜色哈希
My_hash = {
  "1"=>["#00050c"], 
  "2"=>["#ffffff"], 
  "3"=>["#d6e7ff"], 
  "4"=>["#008000"], 
  "5"=>["#0768ef"], 
  "6"=>["#07408e"], 
  "7"=>["#42AAFF"], 
  "8"=>["#21406b"], 
  "9"=>["#032656"]
}

# 按色相值升序排序哈希条目,再转回哈希格式
sorted_hash = My_hash.sort_by do |key, color_array|
  hex_to_hue(color_array.first)
end.to_h

# 输出排序后的颜色列表
sorted_hash.each_value { |value| puts value }

说明

  • 灰度色(比如#ffffff白色、#00050c深黑)的RGB差值为0,所以色相值固定为0,会排在排序结果的最前面。
  • 排序后的颜色会按照色相从0(红/灰度)→120(绿)→240(蓝)的自然色环顺序排列。
  • 代码适用于Ruby 2.1及以上版本,因为用到了sort_by后转哈希的to_h方法。

内容的提问来源于stack exchange,提问作者Маратон

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:01:36