Project1

标题: 二维数组中sort数组排列由小到大的元素如何排列 [打印本页]

作者: ppspssss    时间: 2022-2-18 18:02
标题: 二维数组中sort数组排列由小到大的元素如何排列
本帖最后由 ppspssss 于 2022-2-18 20:27 编辑

二维数组中sort数组排列由小到大的元素如何排列

若 a = [["元素a',5] , ["元素b', 1] ,["元素c', 2],["元素d', 4],["元素e', 3]]
将其排列成 a = [ ["元素b', 1] ,["元素c', 2],["元素e', 3],["元素d', 4],["元素a',5]]
若是 a = [5,1,2,4,3] , 使用a.sort 就可排列成a = [1,2,3,4,5] , 但这在数组之中有没些办法进行排列
若使用第2个元素(整数)大小作比较, 如何将其排列,可是sort好像是单独拆分若是这样二维数组就不会排列

作者: Im剑侠客    时间: 2022-2-18 21:17
一个思路:拆分前作标志,重新排序后按标志恢复。如果是主楼中的不重复数字,用几个for循环判断标志就可以了。
对于可重复数字有点难度,不知道sort的组成内容是什么,如果有sort的非集成结构,即原生的基础代码,应该也可能把标志安插进去处理。
作者: RyanBern    时间: 2022-2-18 22:25
本帖最后由 RyanBern 于 2022-2-18 22:33 编辑

RUBY 代码复制
  1. a.sort_by{ |a| a[1] }

或者
RUBY 代码复制
  1. a.sort{ |a, b| a[1] <=> b[1] }

作者: KB.Driver    时间: 2022-2-19 00:42
ruby这么OOP的语言不来点花式写法?



class MyClass
  include Comparable
  attr_accessor :str, :int
  def initialize(str, int)
    @str, @int = str, int
  end
  def <=>(obj)
    self.to_i <=> obj.to_i
  end
  def to_i
    self.int
  end
  def to_s
    "[#{str.inspect}, #{int}]"
  end
end

a = ('元素a'..'元素e').to_a.zip((1..5).to_a.shuffle!).map { |e| MyClass.new(*e) }
puts a
puts a.sort


作者: ppspssss    时间: 2022-2-19 12:19
Im剑侠客 发表于 2022-2-18 21:17
一个思路:拆分前作标志,重新排序后按标志恢复。如果是主楼中的不重复数字,用几个for循环判断标志就可以 ...

这个目前我想到会用在和敌人距离, 和某些物件的距离,
用for循环来弄, min是获取数组中最小值
手稿图(大慨 ,请勿参考)



和敌人一般也会出现重合的情况,        
就按for扫描的顺序, 但这时会出现老打第1个人的情况, 这种少方格游戏会经常站在同一位置, 这时谁数组靠前谁挨打得到, 这是一般情况, 比如我做追踪球, 两个敌人和球的位移相同, 会优先追第一个, 这就不太好
我的方案
1.谁先到(谁先移动)就追谁,或者,谁之后到就追谁 这样的话就不会出现第1种情况
2.随机, 若两个敌人和球的位移相同,  就随机追谁, 这就比较看运气,  不会出现第1种情况


RUBY 代码复制
  1. def return_nearemeny(user1) #返回最近的敌人
  2.     最小位移 = []
  3. for ee in 0...@eemeny.size
  4.   pu = (@eemeny[ee].x_now-user1.x_now).abs + (@eemeny[ee].y_now-user1.y_now).abs
  5.   最小位移.push(pu)
  6. end #for ee
  7. #p 最小位移
  8.   最小数=最小位移.min
  9.   for mm in 0...最小位移.size
  10.     if 最小位移[mm] == 最小数
  11.     最近者 = mm
  12.       break
  13.     end #if 最小位移[mm]
  14.  
  15.   end # for mm
  16. target = @eemeny[mm]
  17.  
  18. #pst "#{@cannon[i].attackstart_timer}"
  19. return target
  20.  
  21.   end

作者: SailCat    时间: 2022-2-19 14:00
楼主怕是不知道ruby的array是comparable并定义了<=>运算?
当然默认是按照第一个元素排序





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