gpt4 book ai didi

ruby - 如何在 ruby​​ 中找到特定矩阵条目的坐标

转载 作者:数据小太阳 更新时间:2023-10-29 07:28:08 27 4
gpt4 key购买 nike

假设我有一个 5×6 的矩阵,其中填充了单个字母和一些特殊符号,如下所示:

upper = [['A', 'B', 'C', 'D', 'E'],
['F', 'G', 'H', 'I', 'J'],
['K', 'L', 'M', 'N', 'O'],
['P', 'Q', 'R', 'S', 'T'],
['U', 'V', 'W', 'X', 'Y'],
['Z', ',', '.', ' ', '?']]

如何确定我循环遍历的字符串中单个字母的坐标?

我没有找到关于 #index 方法的明确描述,以及我尝试调用它的所有方式(即 upper.index("A") ),失败了。

最后我尝试编写一个简单版本的 two-square encryption method这是我目前难以理解的一步。

感谢您的帮助!

最佳答案

您可以构建一个坐标数组:

coordinates = upper.first.each_index.to_a.product(upper.each_index.to_a)
#=> [[0, 0], [0, 1], [0, 2], [0, 3], [0, 4], [0, 5],
# [1, 0], [1, 1], [1, 2], [1, 3], [1, 4], [1, 5],
# [2, 0], [2, 1], [2, 2], [2, 3], [2, 4], [2, 5],
# [3, 0], [3, 1], [3, 2], [3, 3], [3, 4], [3, 5],
# [4, 0], [4, 1], [4, 2], [4, 3], [4, 4], [4, 5]]

并通过遍历这个数组找到项目的坐标:

coordinates.find { |x, y| upper[y][x] == 'A' }
#=> [0, 0]

coordinates.find { |x, y| upper[y][x] == '?' }
#=> [4, 5]

coordinates.find { |x, y| upper[y][x] == '-' }
#=> nil

替代方法

您可以使用 coordinate => value 对的(一维)散列来代替(二维)行数组。示例:

str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ,. ?'
upper = {}
str.each_char.with_index { |c, i| upper[i.divmod(5)] = c }

upper
#=> {[0, 0]=>"A", [0, 1]=>"B", [0, 2]=>"C", [0, 3]=>"D", [0, 4]=>"E",
# [1, 0]=>"F", [1, 1]=>"G", [1, 2]=>"H", [1, 3]=>"I", [1, 4]=>"J",
# [2, 0]=>"K", [2, 1]=>"L", [2, 2]=>"M", [2, 3]=>"N", [2, 4]=>"O",
# [3, 0]=>"P", [3, 1]=>"Q", [3, 2]=>"R", [3, 3]=>"S", [3, 4]=>"T",
# [4, 0]=>"U", [4, 1]=>"V", [4, 2]=>"W", [4, 3]=>"X", [4, 4]=>"Y",
# [5, 0]=>"Z", [5, 1]=>",", [5, 2]=>".", [5, 3]=>" ", [5, 4]=>"?"}

可以通过[x, y] 坐标访问这些值:

upper[[0, 2]] #=> "C"

查找 key 很简单:

upper.key('C') #=> [0, 2]

您还可以构建一个将值映射到坐标的反向散列:

upper.invert
#=> {"A"=>[0, 0], "B"=>[0, 1], "C"=>[0, 2], "D"=>[0, 3], "E"=>[0, 4],
# "F"=>[1, 0], "G"=>[1, 1], "H"=>[1, 2], "I"=>[1, 3], "J"=>[1, 4],
# "K"=>[2, 0], "L"=>[2, 1], "M"=>[2, 2], "N"=>[2, 3], "O"=>[2, 4],
# "P"=>[3, 0], "Q"=>[3, 1], "R"=>[3, 2], "S"=>[3, 3], "T"=>[3, 4],
# "U"=>[4, 0], "V"=>[4, 1], "W"=>[4, 2], "X"=>[4, 3], "Y"=>[4, 4],
# "Z"=>[5, 0], ","=>[5, 1], "."=>[5, 2], " "=>[5, 3], "?"=>[5, 4]}

关于ruby - 如何在 ruby​​ 中找到特定矩阵条目的坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31912209/

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