运维开发网

Ruby – 将字符映射到2d数组中的整数

运维开发网 https://www.qedev.com 2020-08-11 21:56 出处:网络 作者:运维开发网整理
我有一个问题,我不能为我的生活解决.我正在编写一个 Ruby应用程序(我已经是一个 PHP开发人员已经8年了,刚开始使用Ruby),它出售了音乐厅的门票.每个座位都有一行(a … z)和一个数字(1 … x).数据库模型的每个席位都有row(string)和num(int). 如何将数据库中的席位数组转换为二维数组?例如,座位A1将进入座位[1] [1] =“价值”;座位C4将映射到座位[3] [
我有一个问题,我不能为我的生活解决.我正在编写一个 Ruby应用程序(我已经是一个 PHP开发人员已经8年了,刚开始使用Ruby),它出售了音乐厅的门票.每个座位都有一行(a … z)和一个数字(1 … x).数据库模型的每个席位都有row(string)和num(int).

如何将数据库中的席位数组转换为二维数组?例如,座位A1将进入座位[1] [1] =“价值”;座位C4将映射到座位[3] [4] =值.问题是将行字符串转换为Ascii并减去偏移量?或者有更简单的方法吗?

非常感谢

最简单的方法可能是使用哈希.例如:seat [‘A’] [1] = value

但是如果你出于某种原因确实需要一个数组,那么你描述的方法就是最简单的.假设行字符串是单个字符’A’到’Z’,您可以使用row_string [0] – ?A(或row_string [0] – ?A 1,如果您希望索引从1开始,如示例中所示).对于行AA位于行Z之后的多字符版本,您可以在1.8.7及更高版本中执行此操作:

row_num = row_string.bytes.inject(0) {|total, x| total = total * 26 + x - ?A + 1}

您可能希望事先将行字符串提升,只是为了安全起见.

在1.8.6及更低版本中,String没有字节方法.你可以通过这样做完成同样的事情:

row_num = 0
row_string.each_byte {|x| row_num = row_num * 26 + x - ?A + 1}

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号