查看: 2710|回复: 6

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

[复制链接]
梦石
0
星屑
14720
在线时间
2175 小时
注册时间
2016-9-20
回帖
777
发表于 2022-2-18 18:02:31 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 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好像是单独拆分若是这样二维数组就不会排列
贴子只供参考我贴子内容有很多只是我自己标识的内容代指不是原来意思,偏向发贴当时的想法(后来回看贴发现有很多错误,会造成误导 ),如果想靠谱点应 找相关正确的文章   -- 2025/4/19
梦石
0
星屑
8026
在线时间
1051 小时
注册时间
2012-4-3
回帖
1270

开拓者

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

使用道具 举报

梦石
0
星屑
9557
在线时间
5074 小时
注册时间
2013-6-21
回帖
3459

开拓者贵宾剧作品鉴家

发表于 2022-2-18 22:25:11 | 显示全部楼层
本帖最后由 RyanBern 于 2022-2-18 22:33 编辑

[pre lang="Ruby"]a.sort_by{ |a| a[1] }[/pre]
或者
[pre lang="Ruby"]a.sort{ |a, b| a[1] <=> b[1] }[/pre]
回复

使用道具 举报

梦石
10
星屑
39550
在线时间
1919 小时
注册时间
2010-11-14
回帖
3214

R考场第七期纪念奖

发表于 2022-2-19 00:42:21 | 显示全部楼层
ruby这么OOP的语言不来点花式写法?

QQ截图20220219003547.jpg

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

用头画头像,用脚写脚本
回复

使用道具 举报

梦石
0
星屑
14720
在线时间
2175 小时
注册时间
2016-9-20
回帖
777
 楼主| 发表于 2022-2-19 12:19:32 | 显示全部楼层
Im剑侠客 发表于 2022-2-18 21:17
一个思路:拆分前作标志,重新排序后按标志恢复。如果是主楼中的不重复数字,用几个for循环判断标志就可以 ...

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

最近敌人.png

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


[pre lang="ruby"]  def return_nearemeny(user1) #返回最近的敌人
    最小位移 = []
for ee in 0...@eemeny.size
  pu = (@eemeny[ee].x_now-user1.x_now).abs + (@eemeny[ee].y_now-user1.y_now).abs
  最小位移.push(pu)
end #for ee
#p 最小位移
  最小数=最小位移.min
  for mm in 0...最小位移.size
    if 最小位移[mm] == 最小数
    最近者 = mm
      break
    end #if 最小位移[mm]
   
  end # for mm
target = @eemeny[mm]

#pst "#{@cannon.attackstart_timer}"
return target
   
  end[/pre]

点评

说句题外话,楼主可以多学学ruby语言,了解一下什么是缩进。代码的规范性也是很重要的  发表于 2022-2-19 13:00
贴子只供参考我贴子内容有很多只是我自己标识的内容代指不是原来意思,偏向发贴当时的想法(后来回看贴发现有很多错误,会造成误导 ),如果想靠谱点应 找相关正确的文章   -- 2025/4/19
回复

使用道具 举报

遠航の猫咪

梦石
3
星屑
26947
在线时间
2423 小时
注册时间
2005-10-15
回帖
987

开拓者

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

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部