在List <int> </int>中找到最小的小数字

时间:2014-04-11 10:34:38

标签: c# linq

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

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 
}

如何?

3 个答案:

答案 0 :(得分:4)

试试这段代码:

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中的当前索引。

答案 1 :(得分:0)

编辑:注意稍后添加“无迭代要求”

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

如果没有小于k的值(即listB.Where(x =&gt; x),则会出错

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

答案 2 :(得分:0)

这就是工作:

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;
    }
}