Project1

标题: 关于Ruby数组排序的问题 [打印本页]

作者: 纯属小虫    时间: 2023-6-1 19:09
标题: 关于Ruby数组排序的问题
已知:
data 里面包含了大量的乱序物体

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

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

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

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


作者: 灯笼菜刀王    时间: 2023-6-1 20:24
b = []
a.each{|i| b += data.find_all{|j| j.type_name == i}}
data = b

作者: 765111039    时间: 2023-6-1 22:06
额 楼主你自己不是写出答案了吗,是我的话我会这样写吧,功力较低
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

相比楼上大佬 多了好多行哈哈
作者: 纯属小虫    时间: 2023-6-1 22:26
本帖最后由 纯属小虫 于 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

作者: 灯笼菜刀王    时间: 2023-6-2 09:42
纯属小虫 发表于 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 没有的元素, 就会弹错






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