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

遍历嵌套交易历史哈希时优先指定键,固定登录用户版本展示位置

解决嵌套哈希遍历中优先显示指定用户交易版本的问题

听起来你需要在遍历交易历史哈希时,固定把当前登录用户的版本放在左侧,另一方放在右侧,不管原始哈希里user_id的存储顺序对吧?这里有个简单直接的实现思路,我用Ruby代码来给你演示(看你的哈希格式应该是Ruby环境):

首先,假设你已经拿到了当前登录用户的ID,比如current_user_id = "97"(实际项目里你可以从会话或者当前用户对象里取)。然后我们可以对每个日期下的用户哈希做处理:

# 假设当前登录用户ID
current_user_id = "97"
history_hash = { 
  "2018-03-22" => { 
    "97" => { "id" => "2", "Offer" => "X Y, but no Z", "key" => "AZ81N3" }, 
    "242" => { "id" => "1", "Offer" => "X Y Z", "key" => "AZ81N3" } 
  }, 
  "2018-03-15" => { 
    "242" => { "id" => "1", "Offer" => "X Y Z", "key" => "AZ81N3" }, 
    "97" => { "id" => "2", "Offer" => "nil", "key" => "AZ81N3" } 
  } 
}

# 遍历每个日期的交易记录
history_hash.each do |date, user_trades|
  # 优先获取当前用户的交易版本
  current_user_trade = user_trades[current_user_id]
  # 找到另一方的交易版本(过滤掉当前用户ID)
  other_user_trade = user_trades.values.find { |trade| trade["key"] == current_user_trade["key"] && trade["id"] != current_user_trade["id"] }

  # 现在就可以固定顺序渲染了:左侧current_user_trade,右侧other_user_trade
  puts "日期: #{date}"
  puts "左侧(当前用户): #{current_user_trade}"
  puts "右侧(对方): #{other_user_trade}"
  puts "---"
end

关键思路解释:

  • 直接通过user_trades[current_user_id]精准获取当前用户的交易版本,不管它在哈希里的顺序
  • 利用交易的共同key和不同的id来定位另一方的交易版本(因为双方的交易共享同一个key,但id不同)
  • 这样处理后,不管原始哈希里user_id的顺序如何,你都能保证当前用户的版本始终在左侧,另一方在右侧

如果你的场景里,每个日期下肯定只有两个用户的交易记录,还可以简化一下找另一方的逻辑:

other_user_trade = user_trades.except(current_user_id).values.first

这个方法更高效,直接排除当前用户ID后取剩下的那个值就行,前提是每个日期下确实只有两个用户的交易。

另外,如果你是在视图层(比如Rails的ERB模板)里渲染,也可以用同样的逻辑来组织显示顺序,确保布局的一致性。

内容的提问来源于stack exchange,提问作者michjo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:43:30