LINQ查询中匹配列表项的索引

6gpjuf90  于 2023-06-19  发布在  其他
关注(0)|答案(2)|浏览(135)

我需要知道LINQ查询中匹配项的索引。当我尝试获取索引时,我在join中遇到错误。我的代码如下所示,我期待第一个匹配为(2,0),第二个匹配为(3,1)。我是新的LINQ和建议的欢迎。

public class Test
{
    public int a;
    public string b;

    public Test(int x, string y) { a = x; b = y; }
}        

    List<Test> a1= new List<Test>();  
    List<Test> b1= new List<Test>();  

    a1.Add(new Test(1, "test1-a"));
    a1.Add(new Test(2, "test2-a"));
    a1.Add(new Test(3, "test3-a"));
    a1.Add(new Test(4, "test4-a"));

    b1.Add(new Test(3, "test3-b"));
    b1.Add(new Test(4, "test4-b"));
    b1.Add(new Test(5, "test5-b"));
    b1.Add(new Test(6, "test6-b"));

    var x = from m in a1
            join n in b1 
            on m.a equals n.a
            select((index) => new { index, n.b });
mklgxw1f

mklgxw1f1#

您可以使用Select方法的重载,该方法也提供索引。但你需要在加入收藏之前做到这一点。所以它应该看起来像这样:

var x =
            from m in a1.Select((r, ix) => new {Ix = ix, T = r})
            join n in b1.Select((r, ix) => new {Ix = ix, T = r}) 
             on m.T.a equals n.T.a
            select (m.Ix, n.Ix);

Fiddle

4ioopgfo

4ioopgfo2#

你可以使用重载的Select版本(它提供了item s index),然后是Join

var indexes = a1
  .Select((item, index) => (item, index))
  .Join(b1.Select((item, index) => (item, index)),
        pair => pair.item.a,
        pair => pair.item.a,
       (a, b) => (aIndex: a.index, bIndex: b.index));

// Let's have a look
Console.Write(string.Join(Environment.NewLine, indexes));

输出:

(2, 0)
(3, 1)

相关问题