首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >随机位置在红宝石中压缩2个阵列

随机位置在红宝石中压缩2个阵列
EN

Stack Overflow用户
提问于 2013-01-17 10:25:08
回答 2查看 312关注 0票数 4

是否有一种简单的方法可以在任意位置压缩2数组,并使保持原来的顺序

例如

代码语言:javascript
运行
复制
a=[0,1,2,3,4,5,6,7,8,9,10]


b=["one","two","three","four"]

和一个从0到5的随机数( rand(5) )

代码语言:javascript
运行
复制
zipped = [0,"one",1,2,3,"two",4,"three",5,6,7,8,"four",9,10]

随机序列将1,3,1,4作为位置,将b的每个元素“压缩”到一个

我能做的就是

代码语言:javascript
运行
复制
i=0
merged=a
b.each do |x|
rnd = rand(5)
merged.insert(i+rnd,x)
i=i+rnd
end
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-17 11:24:31

这个版本将提供一个平衡的洗牌,插入不会偏向于数组的两端。

代码语言:javascript
运行
复制
def ordered_random_merge(a,b)
  a, b = a.dup, b.dup
  a.map{rand(b.size+1)}.sort.reverse.each do |index|
    b.insert(index, a.pop)
  end
  b
end
票数 4
EN

Stack Overflow用户

发布于 2013-01-17 16:39:38

下面是Mark Hubbart's approach的一个变体,它具有更多的功能。

MergeTuple = Struct.new :place :value

代码语言:javascript
运行
复制
def ordered_random_merge( merge_to, merge_from )
  merge_from.
  map { |e| MergeTuple[ rand( merge_to.size+1 ), e ] }.
  sort_by { |mt| - mt.place }.
  each_with_object( merge_to.dup ) { |mt, merged| merged.insert(mt.place, mt.value) }
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14376902

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档