Rails 中的排序/随机化/转换数组

发布于 2024-09-27 23:20:51 字数 269 浏览 0 评论 0原文

我得到了这个:

a = [[123,1],[124,1],[125,1],[126,2],[127,3],[128,3]]

我想将 a 变成 b:

  • 值排序
  • 按值数组中的随机

// 更新:

b = [[124,123,125],[126],[128,127]]

如何在 ruby​​ 中执行此操作?我正在使用导轨。

I've got this:

a = [[123,1],[124,1],[125,1],[126,2],[127,3],[128,3]]

And I would like to turn a into b:

  • ordered by value
  • random within array of value

// updated:

b = [[124,123,125],[126],[128,127]]

How to do this in ruby? Im using rails.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

梦归所梦 2024-10-04 23:20:51
a.group_by(&:last).
  sort_by(&:first).
  map(&:last).
  map {|el| el.map(&:first).shuffle }
a.group_by(&:last).
  sort_by(&:first).
  map(&:last).
  map {|el| el.map(&:first).shuffle }
素手挽清风 2024-10-04 23:20:51

一种解决方案是:

a = [[123,1],[124,1],[125,1],[126,2],[127,3],[128,3]]

a = a.sort {|d, e| d[1] <=> e[1]}

prev = a[0][1]; result = []; group = [];

a.each do |e|
  if e[1] == prev
    group << e[0]
  else
    result << group.shuffle
    group = [e[0]]
    prev = e[1]
  end
end
result << group

p result

运行:

$ ruby t.rb
[[125, 123, 124], [126], [127, 128]]

One solution is:

a = [[123,1],[124,1],[125,1],[126,2],[127,3],[128,3]]

a = a.sort {|d, e| d[1] <=> e[1]}

prev = a[0][1]; result = []; group = [];

a.each do |e|
  if e[1] == prev
    group << e[0]
  else
    result << group.shuffle
    group = [e[0]]
    prev = e[1]
  end
end
result << group

p result

run:

$ ruby t.rb
[[125, 123, 124], [126], [127, 128]]
云柯 2024-10-04 23:20:51
a.reduce([]){|m,i|m[i[1]]=(m[i[1]]||[])<<i[0];m}.compact
a.reduce([]){|m,i|m[i[1]]=(m[i[1]]||[])<<i[0];m}.compact
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文