gpt4 book ai didi

c# - 以最低键值获取键值对的最便宜方法?

转载 作者:太空宇宙 更新时间:2023-11-03 17:56:06 24 4
gpt4 key购买 nike

我想要一个将 float 的键值对存储为整数的集合( float 是键)。然后我想找到数字最小的键值对。所以,我基本上想获取具有最低关联浮点键的 int 值。

也许一个让它们根据键排序并允许我对其进行索引以便在索引 0 处获取对象的集合是合适的?但是,我不确定从哪里开始寻找这个。

最佳答案

你可以试试 SortedDictionary .如果你在上面调用 .Keys,你会得到一个排序的键集合。然后您可以使用 LINQ .First()获取集合中第一个键的函数,例如:

var mySortedDictionary = new SortedDictionary<float, int>();

// ...
// Add some values to dictionary
// ...

// Note, you will need the System.Linq namespace for First()
float firstKey = mySortedDictionary.Keys.First();
int firstValue = mySortedDictionary[firstKey];
// If you just need the value:
int firstValue2 = mySortedDictionary.Values.First();

如果您需要获取第一个或最后一个 key 以外的 key ,您可以使用 LINQ .ToArray().ToList()返回可索引数组或列表的函数,如下所示:

float[] indexableKeys = mySortedDictionary.Keys.ToArray();
int[] indexableValues = mySortedDictionary.Values.ToArray();

此外,以下代码将遍历集合并按排序顺序为您提供所有 KeyValuePairs:

foreach (var pair in mySortedDictionary)
{
int key = pair.Key;
// Do stuff with key...
object value = pair.Value;
// Do stuff with value...
}

作为替代方案,您也可以使用 SortedList可索引的。要使用它,您只需要以下代码:

var mySortedList = new SortedList<float, int>();
// ...
// Add some values to sortedlist
// ...
int firstValue = mySortedList.Values[0];

注意:我还没有机会对其中任何一个进行基准测试,所以我不确定哪个性能更好。使用排序集合肯定比常规集合有更多的开销。如果您只需要知道哪个键是第一个,您最好创建一个自定义类,其中包含一个字典和一个私有(private)字段 private float first; 来存储哪个键是第一个。当您添加到该类时,它会将 KeyValuePair 添加到字典中并检查键是否小于您的 first 变量(或者字典中是否没有键)。如果是这样,它将 first 设置为新 key 。当您删除一个值时,您会再次将其从字典中删除。如果键等于您的 first 值,那么您需要对 Dictionary.Keys 集合进行排序并首先找到新的。这可能表现最好,但您必须自己编写该类。

注意: 在做了一些基准测试后,我发现 SortedDictionary 的删除速度更快,但 SortedList 的添加和按键索引速度更快。这是通过填充一个具有 1,000,000 个键值对的常规字典(键被打乱以便它们以随机顺序输入)。然后我:

  • 将这些对中的每一对添加到两个已排序的集合中
  • 对两个已排序集合中的每个键执行查找
  • 通过对两个已排序的集合调用 Remove(Key) 来删除每一对

SortedList 在添加或索引时大约快两倍,但删除每个元素所花费的时间大约是其 1000 倍。

关于c# - 以最低键值获取键值对的最便宜方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10950815/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com