Sorting 彩虹的颜色

Sorting 彩虹的颜色,sorting,groovy,Sorting,Groovy,鉴于彩虹颜色的顺序与此完全相同:ROYGBIV R=红色,O=橙色,Y=黄色,G=绿色,B=蓝色,I=靛蓝,V=紫色,我如何获取列表: def partialUnorderedList =["orange", "blue", "red","green"] 并将其按ROYGBIV顺序分类,得出: def partialOrderedList = ["red", "orange", "green", "blue"] 如果您不介意引入另一个库,则可能非常适合解决此问题 def partialU

鉴于彩虹颜色的顺序与此完全相同:ROYGBIV R=红色,O=橙色,Y=黄色,G=绿色,B=蓝色,I=靛蓝,V=紫色,我如何获取列表:

def partialUnorderedList =["orange", "blue", "red","green"] 
并将其按ROYGBIV顺序分类,得出:

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

如果您不介意引入另一个库,则可能非常适合解决此问题

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

如果您不介意引入另一个库,则可能非常适合解决此问题

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

一个简单的解决方案是使用闭包进行比较,如下所示:

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"]

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()]
}

一个简单的解决方案是使用闭包进行比较,如下所示:

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"]

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()]
}

以下是解决您问题的最简单解决方案:

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)
关于其他投入:

[yellow, red, blue, orange, violet, indigo]
它输出:

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

在上面的代码中使用了

以下是解决您问题的最简单解决方案:

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)
关于其他投入:

[yellow, red, blue, orange, violet, indigo]
它输出:

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

在上面的代码中使用了

以下是我对这个问题的看法:

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

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

它使用输入列表中给定元素在引用列表中的索引位置作为排序标准。

以下是我对该问题的看法:

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

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

它使用输入列表中给定元素在引用列表中的索引位置作为排序标准。

有人能告诉我indexOf是从哪里来的吗?@Ant感谢Christoph。这也是我提出的确切解决方案。另一个有趣的选择是使用枚举,而另一个选择是使用映射。有人愿意提供这些额外的分数吗“有人能告诉我indexOf是从哪里来的订单吗?”Ant感谢Christoph。这也是我提出的确切解决方案。另一个有趣的选择是使用枚举,而另一个选择是使用映射。有人愿意提供这些额外的分数吗