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

Project1

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

[有事请教] 关于Ruby数组排序的问题

[复制链接]

Lv5.捕梦者

梦石
24
星屑
7517
在线时间
249 小时
注册时间
2020-12-4
帖子
306

极短24获奖极短23获奖极短22获奖

跳转到指定楼层
1
发表于 2023-6-1 19:09:09 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
已知:
data 里面包含了大量的乱序物体

其中  data.type_name  是每个物品的类型名

现在有一个数组 a,包含了所有物品的类型名总和
a = ["消耗","素材","合成","武器"]

问题:
将data 进行排序,使得排序结果的物品的类型名,能够按照 a 的先后顺序来排列

结果类似导向:
b = []
for i in 0...data.size
        b << data.type_name
end
b   >>>>>> ["消耗","消耗",......"素材","素材",......"合成","合成",......"武器","武器",......]

Lv5.捕梦者

梦石
0
星屑
39049
在线时间
5727 小时
注册时间
2006-11-10
帖子
6626
5
发表于 2023-6-2 09:42:53 | 只看该作者
纯属小虫 发表于 2023-6-1 22:26
我....我试着解析了一下,是不是跟这个是一样的(豆腐脑用不来each和{})

   b = []

差不多

其实排序这样写更简洁

data.sort!{|i,j| a.index(i.type_name) -  a.index(j.type_name)}

不过这样写的缺点是, 如果data里的type_name有 a 没有的元素, 就会弹错

评分

参与人数 1+1 收起 理由
纯属小虫 + 1 塞糖

查看全部评分

回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
24
星屑
7517
在线时间
249 小时
注册时间
2020-12-4
帖子
306

极短24获奖极短23获奖极短22获奖

4
 楼主| 发表于 2023-6-1 22:26:22 | 只看该作者
本帖最后由 纯属小虫 于 2023-6-1 22:38 编辑
灯笼菜刀王 发表于 2023-6-1 20:24
b = []
a.each{|i| b += data.find_all{|j| j.type_name == i}}
data = b


   
我....我试着解析了一下,是不是跟这个是一样的(豆腐脑用不来each和{})

   b = []

   for i in a
      for j in [email protected]
        b.push(@data[j]) if @data[j].name_type == i
      end
    end

   data = b
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
4654
在线时间
431 小时
注册时间
2016-5-11
帖子
140
3
发表于 2023-6-1 22:06:51 | 只看该作者
额 楼主你自己不是写出答案了吗,是我的话我会这样写吧,功力较低
b = []
b1=[]
b2=[]
b3=[]
for i in 0...data.size
       b.push(i) if data[i].type_name == "消耗"
       b1.push(i) if data[i].type_name == "素材"
       b2.push(i) if data[i].type_name == "合成"
       b3.push(i) if data[i].type_name == "武器"
end
b.push(b1)
b.push(b2)
b.push(b3)
data = b

相比楼上大佬 多了好多行哈哈

点评

hhhh,我开始是这么想的,但觉得太繁琐了;看了刀王写的之后......感觉很轻量,但是脑子炸了  发表于 2023-6-1 22:11

评分

参与人数 1+1 收起 理由
纯属小虫 + 1 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
39049
在线时间
5727 小时
注册时间
2006-11-10
帖子
6626
2
发表于 2023-6-1 20:24:18 | 只看该作者
b = []
a.each{|i| b += data.find_all{|j| j.type_name == i}}
data = b

点评

菜刀大神每次出手只用1行就把问题解决了!太强了!  发表于 2023-6-4 01:42
牛啊...虽然看完之后我脑子CPU都烧掉了,哈哈哈哈哈哈  发表于 2023-6-1 22:09

评分

参与人数 2+2 收起 理由
taeckle + 1 太强了!
纯属小虫 + 1 我很赞同

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-4 02:04

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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