gpt4 book ai didi

arrays - 使用 Ruby,如何从数组的一部分中获取所有正数的计数?

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

我正在开发一个看似简单的 Ruby 应用程序,我最终想将其移植到 Rails。但是,我越来越难以理解如何最好地对数组进行切片,以便我可以评估元素。

注意:我不担心修改代码,但任何建议或清理将不胜感激:D

简述:

我希望能够打乱一个数组,将其分成相等的部分,计算大于零的值,然后打乱这些计数。

纯文本示例:

Set an array to (-2 -1 0 0 1 2)

Shuffle so that (0 2 -1 0 1 -2)

First slice (0 2)
Count of values > 0 = 1

Second slice (-1 0)
Count of values > 0 = 0

Third slice (1 -2)
Count of values > 0 = 1

Array of counted values is now = (1 0 1)

Which are shuffled into (0 1 1)

长版:

给定一个数组:

VALUES = %w(-5 -4 -3 -2 -1 0 0 0 0 0 0 1 2 3 4 5)

打乱这些值:

rand = VALUES.shuffle

然后将数组切片为4个部分(每个切片应该有4个元素)

rand.each_slice(4).to_a

现在我想获取每个切片并计算大于零的值的数量。然而,这就是我陷入困境的地方。

即,我如何选择 slice1、slice2...sliceN?

我还尝试运行:

rand[0..3].select {|e| e > 0}.size

但这给了我一个错误(在注释掉 rand.each_slice(4).to_a 之后)

ruby char_gen.rb 
char_gen.rb:18:in `>': comparison of String with 0 failed (ArgumentError)
from char_gen.rb:18:in `block in <main>'
from char_gen.rb:18:in `select'
from char_gen.rb:18:in `<main>'

我想如果我能通过这个,我就能解决剩下的问题,但是 -FINAL- 步骤将是根据计数值构建一个数组并将它们洗牌......

这是我破解的完整代码块。

    # Initialize some variables
VALUES = %w(-5 -4 -3 -2 -1 0 0 0 0 0 0 1 2 3 4 5)

# Shuffle skill values
rand = VALUES.shuffle

#rand.each_slice(4).to_a

rand[0..3].select {|e| e > 0}.size

#group2 = rand[4..7]
#group3 = rand[8..11]
#group4 = rand[12..15]

#violence = group1.select {|e| e < 0}.count
#charisma = group2.select {|e| e < 0}.count
#intellegence = stat[2]
#mechanics = stat[3]


puts("
-------------------
Stats:
-------------------
Violence: #{violence}, Charisma: #{charisma}, Intellegence: #{intellegence}, Mechanics: #{mechanics}

-------------------
Skills:
-------------------
Athletics: #{rand[0]} Guns: #{rand[4]} Melee: #{rand[8]} Throw: #{rand[12]}
Science: #{rand[1]} Psychology: #{rand[5]} Bureaucracy: #{rand[9]} Local\ Knowledge: #{rand[13]}
Bluff: #{rand[2]} Charm: #{rand[6]} Intimidate: #{rand[10]} Stealth: #{rand[14]}
Operate: #{rand[3]} Engineer: #{rand[7]} Program: #{rand[11]} Demolitions: #{rand[15]}

")

最佳答案

rand.each_slice(4).to_a 不转换切片中的原始数组。在进一步操作之前,您需要将其分配给一个变量。

VALUES = [-5, -4, -3, -2, -1, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5]
#=> [-5, -4, -3, -2, -1, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5]

random_arr = VALUES.shuffle
#=> [2, 5, 4, -4, 0, 0, -1, 0, -5, 1, -3, 0, 0, -2, 0, 3]

slice = random_arr.each_slice(4)
#=> [[2, 5, 4, -4], [0, 0, -1, 0], [-5, 1, -3, 0], [0, -2, 0, 3]]

slice.map { |s| s.count{ |x| x > 0 } }
# => [3, 0, 1, 1]

关于arrays - 使用 Ruby,如何从数组的一部分中获取所有正数的计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39252750/

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