我有一个像:
这样的数组'cars', 'for', 'racs', 'creams', 'scream'.
现在,我所做的是,我对此数组中的每个单词/字符串进行排序,并将该排序后的字符串作为值放入哈希,而原始字符串是键。所以现在我有了
KEYS - VALUES
cars - acrs
for - for
racs - acrs
creams - acemrs
scream - acemrs
此代码为
sorted_words = Hash.new(0)
words.each { |word| sorted_words[word]=word.chars.sort { |a, b| a.casecmp(b) }.join
}
在此之后,我根据值
对哈希进行排序sorted_words = sorted_words.sort{|a1,a2| a1[1]<=>a2[1]}
和实现
scream - acemrs
creams - acemrs
racs - acrs
cars - acrs
for - for
而不是这个我正在寻找像
那样安排的哈希cars - acrs
racs - acrs
creams - acemrs
scream - acemrs
for - for
所以,在上面的列表中,值在排序位置,就像我现在得到的列表一样,但它也考虑了Key值,这就是为什么首先是car,然后是所有其他具有相同值和奶油的键然后对
答案 0 :(得分:1)
听起来你想要按照关键字打破领带对价值主要订单进行排序。试试这样:
sorted_words = sorted_words.sort{|(k1,v1),(k2,v2)| vcmp = v1<=>v2; vcmp!=0 ? vcmp : k1<=>k2 }
# => [["creams", "acemrs"], ["scream", "acemrs"], ["cars", "acrs"], ["racs", "acrs"], ["for", "for"]]
答案 1 :(得分:0)
Hash[
array
.map{|w| [w, w.chars.sort_by(&:downcase).join]}
.sort_by{|k, v| [v, k]}
]
答案 2 :(得分:0)
请试试这个..
arr = ['cars','for','racs','creams','scream']
SW = Hash.new
毫米= arr.each {|字| SW [字] = word.split(//)排序{| A,B |。a.casecmp(b)中加入}}
SS = sw.sort_by {|键,值| [值[-1]]}。逆转
#[[“cars”,“acrs”],[“racs”,“acrs”],[“scream”,“acemrs”],[“creams”,“acemrs”],[“for”, “为”]]