2
これは、入力として、サンプルアレイの例である:ソートアレイと、複数の条件でそれを一意にする - ルビー
hashForAnimals = [{
:animalCd=>"Tiger",:animalType=>"Carnivore", :sortOrder =>3},
{:animalCd=>"Cow",:animalType=>"Herbivore", :sortOrder =>5},
{:animalCd=>"Rabbit", :animalType=>"Herbivore", :sortOrder =>2},
{:animalCd=>"Shark",:animalType=>"Carnivore", :sortOrder =>4},
{:animalCd=>"Cow",:animalType=>"Carnivore", :sortOrder =>1},
{:animalCd=>"Bear", :animalType=>"Omnivore", :sortOrder =>7},
{:animalCd=>"Tiger",:animalType=>"Carnivore", :sortOrder =>6}]
予想される出力:
hashForAnimals = [{
:animalCd=>"Cow", :animalType=>"Carnivore", :sortOrder =>1},
{:animalCd=>"Rabbit", :animalType=>"Herbivore", :sortOrder =>2},
{:animalCd=>"Tiger",:animalType=>"Carnivore", :sortOrder =>3},
{:animalCd=>"Shark",:animalType=>"Carnivore", :sortOrder =>4},
:animalCd=>"Cow", :animalType=>"Herbivore", :sortOrder =>5}
{:animalCd=>"Bear", :animalType=>"Omnivore", :sortOrder =>7}]
私は基づいて配列をソートする必要があります並べ替えの順序と私は同じグループの下に落ちるanimalCdに関連して配列をユニークにする必要があります。
Tigerは最小ソート順で1回出現しましたが、Cowは配列に2回出現しますが、異なるanimalTypeを使用しています。
複数のanimalType配列に配列を集めてソートし、それらを一意にして単一の配列にマージすることで、これを行うことができます。しかし、私はこれのためにエレガントなソリューションが必要です。
私がしようとしているサンプルコード:
hashForAnimals.sort!{|x,y| x[:sortOrder].to_i<=>y[:sortOrder].to_i}.group_by { |a| a[:animalType]}
に私ができる別々のハッシュにグループ化してその後私は、個々のハッシュが一意にして、配列にマージする必要があります。
これは私がそれに近づく方法でも可能ですか?
[OK]を使用することができ、私はあなたの質問をmissunderstod。私は今は良いと思う –
'values_at'メソッドで私の最後の更新を試しましたか? –
values_at APIを認識しませんでした。鮮やかな、迅速な返信に感謝! – user122121