Надеюсь, что это поможет - дайте мне знать, как вы справляетесь с этим или если у вас есть какие-либо вопросы.

наиболее эффективный способ найти конкретный хеш в массиве и заменить его значения на месте, чтобы массив тоже менялся?

Пока у меня есть этот код, но в реальном приложении с множеством данных это становится самой медленной частью приложения, которая, вероятно, теряет память, поскольку неограниченная память постоянно увеличивается, когда я выполняю эту операцию над каждым сообщением websocket.

array = 
  [ 
    { id: 1,
      parameters: {
        omg: "lol"
     },
     options: {
         lol: "omg"
      }
    },
    { id: 2,
      parameters: {
        omg: "double lol"
      },
      options: {
        lol: "double omg"
      }
    }
  ]

selection = array.select { |a| a[:id] == 1 }[0]
selection[:parameters][:omg] = "triple omg"
p array
# => [{:id=>1, :parameters=>{:omg=>"triple omg"}, :options=>{:lol=>"omg"}}, {:id=>2, :parameters=>{:omg=>"double lol"}, :options=>{:lol=>"double omg"}}]