如何以相同的方式对两个数组进行排序?

Rai*_*ner 1 ruby ruby-on-rails ruby-on-rails-3

我有两个数组:

a = [6, 4, 3]
b = [1, 3, 4]
Run Code Online (Sandbox Code Playgroud)

我打电话给a.sort:

a.sort = [3, 4, 6]
Run Code Online (Sandbox Code Playgroud)

如何对数组进行排序,b以使值与排序前的数组中的值具有相同的位置a

它现在是:

b = [4, 3, 1]
Run Code Online (Sandbox Code Playgroud)

因此,值b与数组中的值具有相同的位置a.

Anu*_*rag 12

您可以使用该zip方法将两个数组合并为一个.一旦你结合a和b,你会得到,

[[6, 1], [4, 3], [3, 4]]
Run Code Online (Sandbox Code Playgroud)

现在对数组进行排序,这将根据每个子数组的第一个元素对它们进行排序,

[[3, 4], [4, 3], [6, 1]]
Run Code Online (Sandbox Code Playgroud)

现在我们想要执行zip的反向,以将每个子数组的第一个和第二个元素转换为新数组.使用transpose,我们可以将其恢复为原始形式,

[[3, 4, 6], [4, 3, 1]]
Run Code Online (Sandbox Code Playgroud)

谢天谢地,使用并行分配可以在一行中完成所有这些.这是完整的代码,

x, y = a.zip(b).sort.transpose
Run Code Online (Sandbox Code Playgroud)

现在x应该包含[3, 4, 6],并且y应该包含[4, 3, 1].

  • 太好了!好好利用#zip. (2认同)