在列表中<int>查找最高的小数字



我有两个列表,它们都已排序。

List<int> listA = new List<int>();
// It has { 9,15,21,25,27,33,.......}

List<int> listB = new List<int>();
// it has { 2,3,5,7,11,13,17........}

我正在尝试迭代列表A的值,并获得列表B中的最高小数值。

foreach (var k in listA)
{
 // if 9 in list A  get 7 in list B 
 // if 15 in list A  get 13 in list B  
 // and without iterating entire list B 
}

如何?

试试这个代码:

List<int> listA = new List<int> { 9, 15, 21, 25, 27, 33 };
List<int> listB = new List<int> { 2, 3, 5, 7, 11, 13, 17 };
int j = 0;
foreach (int item in listA)
{
    while (j < listB.Count && listB[j] < item)
        j++;
    if (j > 0)
        Console.WriteLine(listB[j - 1]);
}

它遍历listA,并在必要时增加listB中的当前索引。

编辑:注意"无迭代要求"是后来添加的

foreach (var k in listA)
{
   listB.Where(x=>x<k).Max();
}

如果没有小于k的值(即listB.其中(x=>x

foreach (var k in listA)
{
 listB.Where(x=>x<k).OrderByDescending(x=>x).FirstOrDefault();
}

这就完成了任务:

var listA = new List<int> { 9, 15, 21, 25, 27, 33, };
var listB = new List<int> { 2, 3, 5, 7, 11, 13, 17, };
var be = listB.GetEnumerator();
var last = be.Current;
foreach (var a in listA)
{
    while (be.MoveNext())
    {
        var current = be.Current;
        if (current >= a)
        {
            Console.WriteLine(String.Format("{0} {1}", a, last));
            break;
        }
        last = current;
    }
}

相关内容

  • 没有找到相关文章

最新更新