设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2200|回复: 6
打印 上一主题 下一主题

[已经过期] 二维数组中sort数组排列由小到大的元素如何排列

[复制链接]

Lv4.逐梦者

梦石
0
星屑
14629
在线时间
2152 小时
注册时间
2016-9-20
帖子
861
跳转到指定楼层
1
发表于 2022-2-18 18:02:31 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 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好像是单独拆分若是这样二维数组就不会排列
我发的贴子大多未经整理是草稿抱歉

Lv4.逐梦者

梦石
0
星屑
7921
在线时间
1049 小时
注册时间
2012-4-3
帖子
1271

开拓者

2
发表于 2022-2-18 21:17:49 手机端发表。 | 只看该作者
一个思路:拆分前作标志,重新排序后按标志恢复。如果是主楼中的不重复数字,用几个for循环判断标志就可以了。
对于可重复数字有点难度,不知道sort的组成内容是什么,如果有sort的非集成结构,即原生的基础代码,应该也可能把标志安插进去处理。
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
9532
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

3
发表于 2022-2-18 22:25:11 | 只看该作者
本帖最后由 RyanBern 于 2022-2-18 22:33 编辑

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

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

使用道具 举报

Lv5.捕梦者

梦石
10
星屑
39592
在线时间
1920 小时
注册时间
2010-11-14
帖子
3320

R考场第七期纪念奖

4
发表于 2022-2-19 00:42:21 | 只看该作者
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

用头画头像,用脚写脚本
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
14629
在线时间
2152 小时
注册时间
2016-9-20
帖子
861
5
 楼主| 发表于 2022-2-19 12:19:32 | 只看该作者
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

点评

说句题外话,楼主可以多学学ruby语言,了解一下什么是缩进。代码的规范性也是很重要的  发表于 2022-2-19 13:00
我发的贴子大多未经整理是草稿抱歉
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

遠航の猫咪

梦石
3
星屑
23191
在线时间
2387 小时
注册时间
2005-10-15
帖子
1166

开拓者

6
发表于 2022-2-19 14:00:39 | 只看该作者
楼主怕是不知道ruby的array是comparable并定义了<=>运算?
当然默认是按照第一个元素排序
SailCat (小猫子·要开心一点) 共上站 24 次,发表过 11 篇文章 上 次 在: [2006年01月28日11:41:18 星期六] 从 [162.105.120.91] 到本站一游。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-25 14:09

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表