2011-10-18 9 views
1

虹色の色は、ROYGBIV(R =レッド、O =オレンジ、Y =イエロー、G =グリーン、B =ブルー、I =インディゴ、V =バイオレット虹のグルーヴィーソートカラー

def partialUnorderedList =["orange", "blue", "red","green"] 

とその結果ROYGBIV順にそれを並べ替える::)どのように私は、リストを取るか、あなたがGoogle Guava APIを解決するために良いフィットかもしれない別のライブラリに引っ張ってもかまわない場合

def partialOrderedList = ["red", "orange", "green", "blue"] 

答えて

7

は問題が私の感想です:

def order = ["red", "orange", "yellow", "green", "blue", "indigo", "violet"] 
def input = ["orange", "blue", "red", "green"] 

def sorted = input.sort { order.indexOf it } 

それは、ソート基準として入力リストから指定された要素の参照リスト内のインデックス位置を使用しています。

+0

私の答えの良い良い 'groovier'方法:+1 ... –

+0

よく'誰が私の言うことができますから 'indexOf'は'注文 'のですか? –

+1

@Antのhttp://download.oracle.com/javase/6/docs/api/java/util/AbstractList.html#indexOf(java.lang.Object) –

-1

この問題。

def partialUnorderedList =["orange", "blue", "red","green"] 

def order = "roygbiv".inject([:]){ map, letter -> map[letter] = map.size(); map} 
def sortedList = partialUnorderedList.sort{ a, b -> 
    order[a[0].toLowerCase()] <=> order[b[0].toLowerCase()] 
} 

これは色の最初の文字のインデックスのハッシュマップを作成:

def partialUnorderedList = ["orange", "blue", "red", "green"] 
Ordering roygbivOrdering = Ordering.explicit("red", "orange", "yellow", "green", "blue", "indigo", "violet") 
def partialOrderedList = roygbivOrdering.sortedCopy(partialUnorderedList) 
-1

簡単な解決策はこれと同様に、比較のために閉鎖を使用することです。ソート方法は、最初のメソッドのインデックスを検索し、それを比較します。

これは、固有の最初の文字を使用している場合のみ有効です。フルネームでソートするには、あなたはこのような何かがあります。ここ

def partialUnorderedList =["orange", "blue", "red","green"] 

def order = "red,orange,yellow,green,blue,indigo,violet".split(",").inject([:]){ map, name -> map[name] = map.size(); map} 
def sortedList = partialUnorderedList.sort{ a, b -> 
    order[a.toLowerCase()] <=> order[b.toLowerCase()] 
} 
0

の問題のための最も簡単な解決策です:

def a =["red","orange","yellow","green","blue","indigo","violet"] 
def input = ["orange", "blue", "red","green"] 
list = [] 
for(i=0;i<input.size();i++) 
{ 
    index = a.findIndexValues{ it == input[i]}.join() as Integer 
    list[index] = input[i] 
} 
println list.minus(null) 

出力:他の入力の場合

[red, orange, green, blue] 

[yellow, red, blue, orange, violet, indigo] 

出力:

[red, orange, yellow, blue, indigo, violet] 

上記のコードにfindIndexValuesを使用しました。ここで

+0

なぜdownvote ??? –