列表中的分区键<;KeyValuePair>;c#

列表中的分区键<;KeyValuePair>;c#,c#,keyvaluepair,C#,Keyvaluepair,我有一个键值对列表 var hitCoord = new List<KeyValuePair<int, double>>() 我可以找到总的最高值与 hitCoord.Sort((a, b) => (b.Value.CompareTo(a.Value))); (^可能可以用于以下查询?) 我希望对列表中的键进行分区,以便在指定的键范围内找到满足条件的值 i、 我想在一系列(int)键中找到最高值和最低值 用于(i=0;i(int-lowerbound)和&hit

我有一个键值对列表

var hitCoord = new List<KeyValuePair<int, double>>()
我可以找到总的最高值与

hitCoord.Sort((a, b) => (b.Value.CompareTo(a.Value)));
(^可能可以用于以下查询?)

我希望对列表中的键进行分区,以便在指定的键范围内找到满足条件的值

i、 我想在一系列(int)键中找到最高值和最低值

用于(i=0;i(int-lowerbound)和&hitCoord[i]。键<(int-upperBound)
{
找到最高价值?
}
}

我不确定这是否正确。我不熟悉编程,也不熟悉KeyValuePairs。非常感谢您在这方面提供的任何帮助!谢谢!

您不需要实际排序-您可以使用Linq(使用System.Linq将
添加到.cs文件顶部)。您只需要一个
其中
按键过滤,一个
最大值
即可获得最高值:

var maxValue = hitCoord.Where(hc => hc.Key > lowerbound && hc.Key < upperBound)
                       .Max(hc => hc.Value);
var maxValue=hitCoord.Where(hc=>hc.Key>lowerbound&&hc.Keyhc.Value);

您不需要实际排序-您可以使用Linq进行排序(使用System.Linq;
添加到.cs文件的顶部)。您只需要一个
,其中
按键过滤,一个
最大值
即可获得最高值:

var maxValue = hitCoord.Where(hc => hc.Key > lowerbound && hc.Key < upperBound)
                       .Max(hc => hc.Value);
var maxValue=hitCoord.Where(hc=>hc.Key>lowerbound&&hc.Keyhc.Value);

使用LINQ(
使用System.LINQ;
)可以解决在指定的键范围内查找最大值的问题,如下所示:

hitCoord.Where(c => c.Key > lowerbound && c.Key < upperbound).Max(c => c.Value);
hitCoord.Where(c=>c.Key>lowerbound&&c.Keyc.Value);
方法:

  • 使用
    Where
    筛选所有键在范围内的项目
  • 使用
    Max
    获取最大值

  • 您还可以使用更多的检查和约束来调整和扩展查询。中介绍了一些基本查询。

    使用LINQ(
    使用System.LINQ;
    )可以解决在指定密钥范围内查找最大值的问题,如下所示:

    hitCoord.Where(c => c.Key > lowerbound && c.Key < upperbound).Max(c => c.Value);
    
    hitCoord.Where(c=>c.Key>lowerbound&&c.Keyc.Value);
    
    方法:

  • 使用
    Where
    筛选所有键在范围内的项目
  • 使用
    Max
    获取最大值

  • 您还可以使用更多的检查和约束来调整和扩展查询。中描述了一些基本查询。

    正如其他人所建议的那样,使用linq进行这些操作非常容易。下面是另一个linq调用示例,包括如何创建分区查找

    var hitCoord = new List<KeyValuePair<int, double>>()
    {
        new KeyValuePair<int, double>(1, 1.1),
        new KeyValuePair<int, double>(1, 1.2),
        new KeyValuePair<int, double>(2, 2.0),
        new KeyValuePair<int, double>(2, 2.1)
    };
    
    var partitions = hitCoord.ToLookup(kvp => kvp.Key % 2);
    
    var maxKvp = hitCoord.Max(kvp => kvp.Key);
    var minKvp = hitCoord.Min(kvp => kvp.Key);
    
    int lower = 1;
    int higher = 2;
    
    var maxInRange = hitCoord.Where(kvp => kvp.Key >= lower && kvp.Key <= higher).Max(kvp => kvp.Key);
    
    var hitCoord=新列表()
    {
    新的KeyValuePair(1,1.1),
    新的KeyValuePair(1,1.2),
    新的KeyValuePair(2,2.0),
    新的KeyValuePair(2,2.1)
    };
    var partitions=hitCoord.ToLookup(kvp=>kvp.Key%2);
    var maxKvp=hitCoord.Max(kvp=>kvp.Key);
    var minKvp=hitCoord.Min(kvp=>kvp.Key);
    int-lower=1;
    int更高=2;
    var maxInRange=hitCoord.Where(kvp=>kvp.Key>=lower&&kvp.Key kvp.Key);
    

    也就是说,如果这是性能关键的,那么您可能希望使用除linq之外的其他方法,以便对其进行优化,并避免多次查看列表。

    正如其他人所建议的那样,使用linq执行这些操作非常容易。下面是另一个linq调用示例,包括如何创建分区查找

    var hitCoord = new List<KeyValuePair<int, double>>()
    {
        new KeyValuePair<int, double>(1, 1.1),
        new KeyValuePair<int, double>(1, 1.2),
        new KeyValuePair<int, double>(2, 2.0),
        new KeyValuePair<int, double>(2, 2.1)
    };
    
    var partitions = hitCoord.ToLookup(kvp => kvp.Key % 2);
    
    var maxKvp = hitCoord.Max(kvp => kvp.Key);
    var minKvp = hitCoord.Min(kvp => kvp.Key);
    
    int lower = 1;
    int higher = 2;
    
    var maxInRange = hitCoord.Where(kvp => kvp.Key >= lower && kvp.Key <= higher).Max(kvp => kvp.Key);
    
    var hitCoord=新列表()
    {
    新的KeyValuePair(1,1.1),
    新的KeyValuePair(1,1.2),
    新的KeyValuePair(2,2.0),
    新的KeyValuePair(2,2.1)
    };
    var partitions=hitCoord.ToLookup(kvp=>kvp.Key%2);
    var maxKvp=hitCoord.Max(kvp=>kvp.Key);
    var minKvp=hitCoord.Min(kvp=>kvp.Key);
    int-lower=1;
    int更高=2;
    var maxInRange=hitCoord.Where(kvp=>kvp.Key>=lower&&kvp.Key kvp.Key);
    

    也就是说,如果这是性能关键型的,那么您可能希望使用linq以外的其他工具,以便对其进行优化,并避免多次查看列表。

    尝试这样的操作:KeyValuePair result=hitCoord.Where(x=>(x.Key>0)和&(x.Key<100)).OrderBy(x=>x.Value)。FirstOrDefault()尝试这样的操作:KeyValuePair result=hitCoord.Where(x=>(x.Key>0)和&(x.Key<100)).OrderBy(x=>x.Value).FirstOrDefault();需要使用
    System.Linq;
    ,需要使用
    System.Linq;