Sorting 彩虹的颜色
鉴于彩虹颜色的顺序与此完全相同:ROYGBIV R=红色,O=橙色,Y=黄色,G=绿色,B=蓝色,I=靛蓝,V=紫色,我如何获取列表: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
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。这也是我提出的确切解决方案。另一个有趣的选择是使用枚举,而另一个选择是使用映射。有人愿意提供这些额外的分数吗