0

私は次のような配列を持っています:

'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

したがって、上記のリストでは、値は現在取得しているリストのように並べ替えられた位置にありますが、キー値も考慮されているため、最初に車、次に同じ値を持つ他のすべてのキーとクリーム、次に

4

3 に答える 3

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"]]
于 2012-10-10T05:44:15.563 に答える
0
Hash[
  array
  .map{|w| [w, w.chars.sort_by(&:downcase).join]}
  .sort_by{|k, v| [v, k]}
]
于 2012-10-10T07:38:01.023 に答える
0

これを試してみてください。

arr = ['cars'、'for'、'racs'、'creams'、'scream']

sw = Hash.new

mm = arr.each {| word | sw [word] = word.split(//)。sort {| a、b | a.casecmp(b)}。join}

ss = sw.sort_by {| key、value |[value[-1]]}。reverse

#[["cars"、 "acrs"]、["racs"、 "acrs"]、["scream"、 "acemrs"]、["creams"、 "acemrs"]、["for"、 "for" ]]

于 2012-10-11T05:27:12.867 に答える