Project1

标题: 离成功就差一步的时候出了错误~救命啊! [打印本页]

作者: 沉滞的剑    时间: 2013-4-17 18:46
标题: 离成功就差一步的时候出了错误~救命啊!
本帖最后由 沉滞的剑 于 2013-4-18 15:55 编辑

自己设计了一个技能树系统
每个技能都有一个数组坐标来定位位置
但是才用新的位置绘制以后会导致两个问题,
一是选项实际排列方式和展示的不一样,鼠标还可以操作但是键盘就显得没规律了。
然后就是无法滚屏,因为程序不知道的命令实际位置在哪里。
我想如果我能解决排列问题,就能修改按钮方法控制翻页,我想把一个多维数组重新排序,另一个数组按照前一个数组的方式排序。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

数组A 存放的是 技能数组[a1,a2,a3,*...]
数组B 存放的是 技能位置数组 [[x,y],[x,y],*[,]...]
AB的长度是相等的
我想对数组B进行排序,让它按x的值从小到大的顺序排列,x相等的话考虑y(每个技能的坐标唯一)
让后A能按照B的顺序进行相同的排序
应该怎么实现?
作者: 沙漠点灰    时间: 2013-4-17 22:37
本帖最后由 沙漠点灰 于 2013-4-17 22:41 编辑
  1. i = 0
  2. a= [5,4,2,6]
  3. b=[[1,1],[1,2],[0,1],[0,2]]
  4. c = b.inject({}){|x,y|x[a[i]] = y;i+=1;x}
  5. a.sort!{|x,y|c[x] <=> c[y]}
  6. b.sort!
  7. p a
  8. p b
复制代码
a是数组A
b是数组B
其他变量可自定义名称(i,   x,y,   c)
作者: Sion    时间: 2013-4-17 22:54
直接用Hash类建立一一对应关系。
作者: 沉滞的剑    时间: 2013-4-18 13:31
沙漠点灰 发表于 2013-4-17 22:37
a是数组A
b是数组B
其他变量可自定义名称(i,   x,y,   c)

不好意思,能详细介绍下sort的用法么?谢谢了。
作者: SuperMario    时间: 2013-4-18 15:50
沉滞的剑 发表于 2013-4-18 13:31
不好意思,能详细介绍下sort的用法么?谢谢了。
  1. a <=> b                     #a>b => 1; a=b => 0; a<b => -1
  2. array.sort {|a, b| a <=> b} # => new_array; 按一定顺序比较array中的元素,然后进行顺序排序,可以简写为 array.sort
  3. array.sort {|a, b| b <=> b} # => array.sort.reverse
  4. array.sort!                 # => array = array.sort
复制代码
楼上的方法就是利用了哈希表的对应特性,利用一个数组对另一个数组进行排序。




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1