gpt4 book ai didi

Ruby,从组合中获取唯一切片

转载 作者:太空宇宙 更新时间:2023-11-03 16:37:01 25 4
gpt4 key购买 nike

我有什么

a = [1,2,3,4]
=> [1, 2, 3, 4]

b = a.combination(2).to_a
=> [[1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4]]

b.each_slice(2).to_a
=> [[[1, 2], [1, 3]], [[1, 4], [2, 3]], [[2, 4], [3, 4]]]

我想要实现的是一个独特的组合

=> [[[1, 2], [3, 4]], [[1, 4], [2, 3]], [[1, 3], [2, 4]]]

我尝试过排列、展平等。但找不到神奇的 ruby 代码!

编辑:

上面的答案是这样的

b = a.combination(2).to_a
=> [[1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4]]

更准确地说。

来自

a = [1,2,3,4,5,6]

如何获得

=> [[[1, 2], [3, 4], [5, 6]], [[1, 3], [2, 5], [4, 6]], [[1, 4], [2, 6], [3, 5]], [[1, 5], [2, 4], [3, 6]], [[1, 6], [2, 3], [4, 5]]]

这是 5 个唯一值数组 (1,2,3,4,5,6):

[1, 2], [3, 4], [5, 6]
[1, 3], [2, 5], [4, 6]
[1, 4], [2, 6], [3, 5]
[1, 5], [2, 4], [3, 6]
[1, 6], [2, 3], [4, 5]

You seem to have changed the question. Originally you wanted an array of arrays, each of >which had a pair of arrays. Now you want triplets?

是的,因为 [1,2,3,4] 的第一个例子太简单了,答案不适合更复杂的数组,如 [1,2,3,4,5,6] 和所以一个。

最佳答案

我认为这可以让你完成大部分工作

[1,2,3,4].combination(2).inject([]){|arr,r| arr << (Hash[*r]); arr}

如果你迭代地从这个数组中取出第一个和最后一个元素,你就会得到你想要的东西

def con(h, arr = []) 
arr <<[h.delete(h.first).to_a.flatten, h.delete(h.last).to_a.flatten]
con(h, arr) unless h.empty?
p arr
end

#=> [[[1, 2], [3, 4]], [[1, 3], [2, 4]], [[1, 4], [2, 3]]]

关于Ruby,从组合中获取唯一切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6537131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com