3

文字列を含む配列があり、アルファベット順にしたいのですが、いくつかのデフォルトが上にあります。例えば:

["a", "b", "default1", "d", "default2", "c", "e"]

結果は次のようになります。

["default1", "default2", "a", "b", "c", "d", "e"]

誰かが私がこれを簡単に達成する方法を知っていますか?

アップデート

デフォルトも配列に含まれており、配列はアルファベット順になっています。

4

3 に答える 3

6

列挙可能な内容partition:

data = ["a", "b", "default1", "d", "default2", "c", "e"]
data.partition{ |d| d['default'] }.flatten
=> ["default1", "default2", "a", "b", "d", "c", "e"]

取得したデータが最終的な順序で並べ替えられていない場合は、パーティション分割する前に事前に並べ替えることができます。

data = ["c", "b", "default2", "a", "default1", "e", "d"]
data.sort.partition{ |d| d['default'] }.flatten
=> ["default1", "default2", "a", "b", "c", "d", "e"]

さまざまな「デフォルト」エントリを処理するために、よりインテリジェントで包括的なソート アルゴリズムが必要な場合は、デフォルトと通常のエントリの違いを識別し、必要な,および値を返すことができるラムダまたはプロシージャでsortorを使用できます。sort_by-101

于 2012-11-05T17:20:35.120 に答える
4

このような作品:

array = ["a", "b", "default1", "d", "default2", "c", "e"]
defaults = ["default1", "default2"] #Add more if needed
sorted_array = array.sort{|a, b| defaults.include?(a) ? -1 : defaults.include?(b) ? 1 : a <=> b }
puts sorted_array # => ["default1", "default2", "a", "b" "c", "d", "e"]
于 2012-11-05T16:56:51.907 に答える
3

配列によって定義された辞書式順序を利用して、次のように記述します。

defaults = Hash[["default1", "default2"].to_enum.with_index.to_a]
xs = ["a", "b", "default1", "d", "default2", "c", "e"]
xs.sort_by { |x| [defaults[x] || defaults.size, x] }
#=> ["default1", "default2", "a", "b", "c", "d", "e"]
于 2012-11-05T17:30:52.157 に答える