How to sort an array in Ruby to a particular order?

前端 未结 3 897
南笙
南笙 2020-12-01 07:56

I want to sort an array in particular order given in another array.

EX: consider an array

a=[\"one\", \"two\", \"three\"]
b=[\"two\", \"one\", \"thr         


        
相关标签:
3条回答
  • 2020-12-01 08:15

    If b includes all elements of a and if elements are unique, then:

    puts b & a
    
    0 讨论(0)
  • 2020-12-01 08:23

    Assuming a is to be sorted with respect to order of elements in b

    sorted_a = 
    a.sort do |e1, e2|
      b.index(e1) <=> b.index(e2)
    end
    

    I normally use this to sort error messages in ActiveRecord in the order of appearance of fields on the form.

    0 讨论(0)
  • 2020-12-01 08:35

    Array#sort_by is what you're after.

    a.sort_by do |element|
      b.index(element)
    end
    

    More scalable version in response to comment:

    a=["one", "two", "three"]
    b=["two", "one", "three"]
    
    lookup = {}
    b.each_with_index do |item, index|
      lookup[item] = index
    end
    
    a.sort_by do |item|
      lookup.fetch(item)
    end
    
    0 讨论(0)
提交回复
热议问题