说我有一个 list
[1,2,2,1,3,3,3,2,3,3,1,3,3,2,3]
任何想法如何对它们进行分组(
List<KeyValuePair<int, int>>
),以便键是下一个最小的数字,而值是下一个最大的数字,如果它重复自己,用相同的最小键将其分组,如果有意义的话......这是我正在寻找的输出:
[Key, Value]
[0,1]
[0,2]
[3,4]
[3,5]
[3,6]
[7,8]
[7,9]
[10,11]
[10,12]
[13,14]
最佳答案
基于图像和示例输入:
var list = new List<int> { 1, 2, 2, 1, 3, 3, 3, 2, 3, 3, 1, 3, 3, 2, 3}; //example input
var results = new List<KeyValuePair<int, int>>();
int key = 0;
for (int i = 0; i < list.Count; i++)
{
if(i==0 || list[i] < list[i - 1])
key = i++; //assign key and proceed to next index (NB no index out of range checking)
results.Add(new KeyValuePair<int, int>(key, i));
}
这使用与前一个元素的直接比较,并使用索引作为键和值,如示例输出中所示。如果键值始终小于描述中的前一个元素,则可以将 if 替换为:
if(i==0 || list[i] < list[i - 1])
编辑,使元组成为 KeyValuePair
关于c# - 按 KeyValuePair 对列表值进行分组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32181555/