Ruby 将一个数组随机打乱排序

在写ruby代码,想要将给定的一个数组随机打乱,在网上找了半天,看别人的代码始终觉得有点糊涂,于是自己写了一个:

def randomArray(arr)
  newArr = []
  arr.count.times do
    index = arr.count
    newArr << arr[rand(index)]
    arr = arr - newArr
  end
  newArr
end

实验几个例子:

p randomArray([1,2,3,4])
p randomArray(["a","b","c","d","e","f","g"])
p randomArray(["a","b","c","a","a"])
# 返回:
# [2, 4, 3, 1]
# ["f", "d", "b", "c", "g", "e", "a"]
# ["a", "c", "b", nil, nil] # 这里有问题

每次运行,会出现不同的顺序。
但是看到有重复元素的组会出现问题,
改进一下代码:

# 将一个数组打乱
def randomArray(arr)
  # 先将arr的index打乱
  indexList = (1..arr.count).to_a
  ranIndexList = []
  indexList.count.times do
    i = indexList.count
    ranIndexList << indexList[rand(i)]
    indexList = indexList - ranIndexList
  end
  # 然后再按照打乱的idnex重新组合
  newArr = []
  ranIndexList.each do |i|
    newArr << arr[i-1]
  end
  newArr
end

再试试:

p randomArray([1,2,2,"a","a"])
p randomArray(["a","b","c","a","a"]
# [2, 2, 1, "a", "a"]
# ["a", "a", "b", "c", "a"]

最后泪崩,ruby中也有shuffle的功能:
arr.shuffle

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值