Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rails中的排序/随机化/转换数组_Ruby On Rails_Ruby_Arrays_Multidimensional Array - Fatal编程技术网

Ruby on rails rails中的排序/随机化/转换数组

Ruby on rails rails中的排序/随机化/转换数组,ruby-on-rails,ruby,arrays,multidimensional-array,Ruby On Rails,Ruby,Arrays,Multidimensional Array,我有这个: a = [[123,1],[124,1],[125,1],[126,2],[127,3],[128,3]] 我想把a变成b: 按价值排序 值数组中的随机数 //更新: b = [[124,123,125],[126],[128,127]] 如何在ruby中实现这一点?Im使用rails。一种解决方案是: a = [[123,1],[124,1],[125,1],[126,2],[127,3],[128,3]] a = a.sort {|d, e| d[1] <=>

我有这个:

a = [[123,1],[124,1],[125,1],[126,2],[127,3],[128,3]]
我想把a变成b:

  • 按价值排序
  • 值数组中的随机数
//更新:

b = [[124,123,125],[126],[128,127]]
如何在ruby中实现这一点?Im使用rails。

一种解决方案是:

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

a.reduce([]){[m,i[m[i[1]]=(m[i[1]]|[124])我认为你的结果括号不匹配-你的意思是:[[124123125],[126],[127128]?你是说你想把a转换成b吗?你的
b=[124123125],[126],[128][127]
在ruby中是非法的。也许你的意思是
[[123,124,125],[126,128]]
是的,我很抱歉。我更正了上面问题中的b好吧,所以你会说:先随机化a。然后按照你所说的做a。每个?组内的随机性很重要。当你可以在添加到结果时向组中添加随机数时,你甚至可以通过将group_by的结果直接用作哈希来删除第一个映射
a.group_by(&:last).map{|,v | v.map(&:first).shuffle}
它不需要排序吗?如果a是
a=[30100],[123,1],[124,1],[125,1],[126,2],[127,3],[128,3]
那么结果就是
[30],[123,124,125],[126],[128,127]
動靜能量, 你的意思是什么?它是按第二个参数排序的,对吗?30不应该排到最后吗?很好!我只是厚颜无耻地想出了一个替代版本,少了一个调用:a.group_by(&:last.values.map{x | x.map(&:first.shuffle}thx Lars!虽然我更喜欢一点人类语言,所以在某个时候重新阅读代码时,它实际上对我来说是有意义的:)
$ ruby t.rb
[[125, 123, 124], [126], [127, 128]]
a.group_by(&:last).
  sort_by(&:first).
  map(&:last).
  map {|el| el.map(&:first).shuffle }
a.reduce([]){|m,i|m[i[1]]=(m[i[1]]||[])<<i[0];m}.compact