草庐IT

ruby - 在 Ruby 中,如何将一个多维数组按另一个多维数组排序?

假设我有一个数组:a=[[1,2,3],[4,5]]我有另一个数组:b=[[2.5,1.5,3.5],[1.5,2.5]]我需要根据“b”对“a”进行排序。即输出应该是=[[3,1,2],[5,4]]我试过了,但我的代码似乎很长。如果你能帮助我,那就太好了。谢谢! 最佳答案 这为您的样本输入提供了样本输出,所以希望它是您想要的(它按照第二个数组相应子数组中相同位置的值对第一个数组中每个子数组的值进行降序排序):classArraydefsort_by_other_array(arr)zip(arr).sort_by{|x,y|y}.

ruby-on-rails - Ruby - 添加到多维数组

我想遍历一个过程,每次都向我的数据库添加一个对象,但如果添加不正确,我想在多维数组中收集错误。第一个数组将保留出现错误的批处理,第二个数组将包含错误消息。这是我的声明:errors=[[],[]]所以我希望数组的格式如下:[[lot_count,"#{attribute}:#{error_message}"]]循环后应该是这样的:[[1,"Name:Cannotbeblank"],[1,"Description:Cannotbeblank"],[2,"Name:Cannotbeblank"]]我的问题是它不会将它添加到数组中。我不确定多维数组的语法是否不同。这在我的数组中没有给我任何东

arrays - Ruby:多维数组到一维行

在Ruby中,我该怎么做:[1,["green","blue","black"],[["1","2"],["3"],["4","5"]]]为了这个?[[1,"green","1"],[1,"green","2"],[1,"blue","3"],[1,"black","4"],[1,"black","5"],]我试过.zip但没有成功。非常感谢任何帮助,当然我正在寻找一个高性能的解决方案。 最佳答案 这个模式对我来说不是很清楚,但这会得到你提供的例子的预期输出:data[1].zip(data[2]).flat_map{|x,ys|[

ruby-on-rails - 从多维数组中删除 "empty"个元素

我有一个像这样的多维数组[[[]],[[1],[2]],[[1,2]]]删除空数组的最佳方法是什么?现在我只是在做一个array[1..-1]来删除第一个元素,但我想要一个更可靠的方法来完成它。 最佳答案 展开每个数组,如果其中没有元素,则将其删除。arr=[[[]],[[1],[2]],[[1,2]]]arr=arr.delete_if{|elem|elem.flatten.empty?}#=>[[[1],[2]],[[1,2]]] 关于ruby-on-rails-从多维数组中删除"e

ruby - 是否可以按子哈希值对多维哈希进行排序?

是否可以根据子键的值对父哈希进行排序?例如:{:a=>{:order=>3},:b=>{:order=>1},:c=>{:order=>2}}归类为{:b=>{:order=>1},:c=>{:order=>2},:a=>{:order=>3}} 最佳答案 你可以把它转换成对数组,使用sort_by方法来定位要排序的值,然后将其转换回哈希:h={:a=>{:order=>3},:b=>{:order=>1},:c=>{:order=>2}}h.sort_by{|k,v|v[:order]}.to_h=>{:b=>{:order=>1

ruby-on-rails - 从 ruby​​ 多维数组中找到最大的子数组

我想从ruby​​的多维数组中找出最大的子数组。我有一个多维数组,如下所示:array=[[1,20],[2,40],[5,100],[7,15],[9,22]]我想要子数组的第一个元素,第二个元素最大,就像上面的例子一样我想要5作为输出,因为子数组的第二个元素[5,100]最大,为100。输出将为5。如果超过一个元素的最大值超过我想要的所有这些。例如:array=[[1,20],[2,40],[5,100],[7,15],[9,22],[12,100]]在这种情况下输出将是[5,12]提前致谢。 最佳答案 您可以使用Enumera

arrays - Ruby 多维数组 - 删除第一个位置的重复项,在第二个位置添加数字

对于这个数组:items=[[60,3],[60,3],[276,2],[276,2],[48,2],[207,2],[46,2],[60,2],[280,2],[207,1],[48,1],[112,1],[60,1],[207,1],[112,1],[276,1],[48,1],[276,1],[48,1],[276,1],[276,1],[278,1],[46,1],[48,1],[279,1],[207,1]]我想将每个子数组第一个位置的公共(public)数字组合起来,并将第二个位置的数字相加。例如,您会看到这里的前四个子数组是:[60,3]、[60,3]、[276,2]、[

ruby - 多维各

我会怎么做像下面这样的事情?['foo'['bar','baz'],['one',['two','three']]].each{|word|putsword}#Iwantthistoreturn:foobarbazonetwothree 最佳答案 你能使用flatten吗?['foo'['bar','baz'],['one',['two','three']]].flatten.each{|word|putsword}flatten将返回数组的副本,因此不会修改原始数组。它也是完全递归的,因此无论您有多少个数组中的数组都没有关系。

c++ - 多维 std::array

这个问题在这里已经有了答案:Whycan'tsimpleinitialize(withbraces)2Dstd::array?[duplicate](1个回答)关闭4年前。在C++中,如何创建多维std::array?我试过这个:std::array,3>arr={{5,8,2},{8,3,1},{5,3,9}};但它不起作用。我做错了什么,我该如何解决? 最佳答案 您需要额外的括号,直到c++14proposal开始了。std::array,3>arr={{{5,8,2},{8,3,1},{5,3,9}}};

c++ - 多维 std::array

这个问题在这里已经有了答案:Whycan'tsimpleinitialize(withbraces)2Dstd::array?[duplicate](1个回答)关闭4年前。在C++中,如何创建多维std::array?我试过这个:std::array,3>arr={{5,8,2},{8,3,1},{5,3,9}};但它不起作用。我做错了什么,我该如何解决? 最佳答案 您需要额外的括号,直到c++14proposal开始了。std::array,3>arr={{{5,8,2},{8,3,1},{5,3,9}}};