在列表上执行二进制搜索并使用查找返回

时间:2014-05-29 05:50:29

标签: c# .net linq search collections

您好我有一个二进制搜索方法来搜索特定记录。我会有一个索引位置。现在我想使用此索引位置通过使用lookup而不是Groupby从记录列表中获取组:

    public static Data BinSearch(MyData searchDate)
        {
            IComparer<Data> rc = new RecComparer();

            int index;
            index = recordList.BinarySearch(searchDate, (IComparer<MyData>)rc);
            Console.WriteLine(index);
             int i = 1;
            foreach (var r in recordList)
            {
                Console.WriteLine("Line:" + i + " " + r.DateDetails + " " + r.TrackDetails);
                i++;
            }  
            if (index >= 0)
            {
               // return recordList[index];
            }

            index = ~index;

            if (index == 0 || index == recordList.Count)
            {
              //  return null;
            }

            int newIndex = (((index-1)+index)/2)+1;
            string pointer = recordList[newIndex].DateDetails;

我的指针正确显示。并指向我需要的正确索引。现在使用下面的代码行,我将使用lookup进入组:

 var lookup = recordList.ToLookup(d => d.DateDetails);

如果我编写以下代码,现在问题就出现了:

    var test = lookup.ElementAt(pointer);
     foreach (var print in lookup.ElementAt(newIndex))
           {Console.WriteLine("{0} {1}", print.Data1, print.Data2);
return (print);


 }
}

它给了我一个异常的outOF范围,因为最初记录列表在记录列表中有180多条记录。现在通过查找它进行了分组,它在测试变量中变成了大约60条记录。所以这是一个例外。

我希望你理解我的问题。我如何让最后一部分工作,因为我希望返回一个带有查找的数据类型而不是groupby的Igrouping类型。

请帮忙。谢谢你

0 个答案:

没有答案