如何知道集合中的值的索引

时间:2011-11-10 23:29:06

标签: file list collections groovy indexing

参考这个问题:How to subtract dates from each other

在Groovy中,我有一个脚本可以从文本文件集中吐出5个最大的值。我怎么知道这些值的索引是什么?

2 个答案:

答案 0 :(得分:0)

如果您有一系列事项,例如:

def list = [ 'c', 'a', 'b' ]

了解原始索引的一种方法是使用transpose()将此列表连接到计数器,然后对新列表进行排序,然后您将获得一个以原始索引作为次要元素的排序列表

即:

[list,0..<list.size()].transpose().sort { it[0] }.each { item, index ->
  println "$item (was at position $index)"
}

打破这种局面;

[list,0..<list.size()]

为我们(有效)提供了一个新列表[ [ 'c', 'a', 'b' ], [ 0, 1, 2 ] ]

在此处调用transpose()会给我们:[ [ 'c', 0 ], [ 'a', 1 ], [ 'b', 2 ] ]

然后我们根据每个元素中的第一个项目(原始列表中的字母)对列表进行排序sort { it[0] }

然后遍历每个,打印出我们现在已排序的项目及其原始索引位置

答案 1 :(得分:0)

如果值是唯一的,您可以在原始列表中使用indexof方法。例如,如果您有列表:

def list = [4, 8, 0, 2, 9, 5, 7, 3, 6, 1]

你知道如何获得5个最大值:

def maxVals = list.sort(false, {-it}).take 5 // This list will be [9, 8, 7, 6, 5]

然后你可以这样做:

def indexes = maxVals.collect { list.indexOf it }
println indexes

它会打印出来:

[4, 1, 6, 8, 5]