我有两个列表,它们都已排序。
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;
}
}