首页 > 解决方案 > 如何在具有起始索引的字典中查找下一个 2 或 4 个空键

问题描述

我有Dictionary<ushort, ushort>,假设我有KeyValuePair来自带有索引43001和值的 json 文件。如果值是float我必须将浮点数转换为 2 个 ushort 值并将它们存储在字典中,其中高阶字节将位于43001,低阶字节将存储在43002. 如果是,double我必须将它存储为 4 个超短裤。这很好,我知道该怎么做。如果我有另一个float具有相同起始索引的值,43001我必须以43003. 如果43001已经存在,我怎样才能在43001until之后找到下一个 2 个可用索引(或 4 个用于双精度) 65535

我知道我可以做类似的事情

for (ushort i = 43001; i < 65535; i += 2)
{
   if (!dict.ContainsKey(i) && !dict.ConainsKey(i + 1))
   {
       return //whatever;
   }
}

双倍也是如此,但我认为有更优雅和更好的方法。

标签: c#

解决方案


在我的头顶上,像

var start = 43001;
var end = 65535;
var range = end - start;
var step = 2;
var nextSlot = Enumerable.Range(0, range / step)
    .Select(i => (ushort)(start + i * step))
    .First(i =>
        Enumerable.Range(0, step)
            .Select(ii => (ushort)(ii + i))
            .All(iii => !dict.ContainsKey(iii)));

推荐阅读