返回列表 1 和列表 2 中的项目匹配的列表

发布于 2024-10-30 17:50:18 字数 486 浏览 2 评论 0原文

假设我有 2 个 List List1 和 List2,如下所示:

List 1:

[ID:1, Name:"item1"]
[ID:2, Name:"item2"]
[ID:3, Name:"item3"]
[ID:4, Name:"item4"]

List 2:

[ID:2, Name:"item2"]
[ID:3, Name:"item3"]
[ID:5, Name:"item5"]
[ID:6, Name:"item6"]

如何获取列表仅包含两个列表中的对象?使用上面的例子,我想返回:

[ID:2, Name:"item2"]
[ID:3, Name:"item3"]

修改原来的列表就可以了。最好的方法是什么?

Let's assume I have 2 List<T> List1 and List2 that look like this:

List 1:

[ID:1, Name:"item1"]
[ID:2, Name:"item2"]
[ID:3, Name:"item3"]
[ID:4, Name:"item4"]

List 2:

[ID:2, Name:"item2"]
[ID:3, Name:"item3"]
[ID:5, Name:"item5"]
[ID:6, Name:"item6"]

How can I get a list that contains only the objects that are in both lists? Using the example above, I want to return:

[ID:2, Name:"item2"]
[ID:3, Name:"item3"]

Modifying the original lists is OK. What's the best way to do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

橘虞初梦 2024-11-06 17:50:18
  var result = list1.Intersect(list2).ToList();

是最简洁的。但请记住,它使用的是默认的相等比较器,它可能适合您,也可能不适合您。如果没有,您可以提供自己的:

    public class MyEqualityComparer : IEqualityComparer<Foo>
    {
        public bool Equals(Foo x, Foo y)
        {
            return x.Id == y.Id;
        }

        public int GetHashCode(Foo obj)
        {
            return obj.Id.GetHashCode();
        }
    }

  var result = list1.Intersect(list2, new MyEqualityComparer()).ToList();
  var result = list1.Intersect(list2).ToList();

Is the most succinct. However keep in mind it is using the default equality comparer which may or may not work for you. If not, you can provide your own:

    public class MyEqualityComparer : IEqualityComparer<Foo>
    {
        public bool Equals(Foo x, Foo y)
        {
            return x.Id == y.Id;
        }

        public int GetHashCode(Foo obj)
        {
            return obj.Id.GetHashCode();
        }
    }

  var result = list1.Intersect(list2, new MyEqualityComparer()).ToList();
梦归所梦 2024-11-06 17:50:18

如果列表中没有重复项,您可以执行以下操作:

var combinedList = list2.Intersect(list1).ToList();

编辑:

正如 @Matt Greer 指出的那样,您将需要一个自定义相等比较器才能按您的预期工作。

If there are no duplicates in the list you can do this:

var combinedList = list2.Intersect(list1).ToList();

Edit:

As @Matt Greer pointed out you will need a custom equality comparer for this to work as you would expect.

谜泪 2024-11-06 17:50:18

与 jQuery 一样,答案始终是 LINQ!

var intersection = list1.Where(item => list2.Contains(item)).ToList();

假设列表包含实际引用的副本。如果没有,则执行以下操作:

var intersection = list1.Where(item => list2.Count(match => item.ID == match.ID && item.Name == match.Name) > 0).ToList();

Like jQuery, the answer is always LINQ!

var intersection = list1.Where(item => list2.Contains(item)).ToList();

Assuming the list contains a copy of the actual reference. If not, then do:

var intersection = list1.Where(item => list2.Count(match => item.ID == match.ID && item.Name == match.Name) > 0).ToList();
风向决定发型 2024-11-06 17:50:18

这里使用lua代码:

ArrayList1={}
ArrayList2={}

function inTable(tbl,val)
   for _,v in ipairs(tbl) do
      if v==val then return true end
   end
   return false
end

function getSame(tbl1,tbl2)
   returnArray={}
   for _,v in ipairs(tbl1) do
      if inTable(tbl2,v) then table.insert(returnArray,v) end
   end
end

newArray=getSame(arrayList1,arrayList2)

我对C#不太熟悉。

Using lua code here:

ArrayList1={}
ArrayList2={}

function inTable(tbl,val)
   for _,v in ipairs(tbl) do
      if v==val then return true end
   end
   return false
end

function getSame(tbl1,tbl2)
   returnArray={}
   for _,v in ipairs(tbl1) do
      if inTable(tbl2,v) then table.insert(returnArray,v) end
   end
end

newArray=getSame(arrayList1,arrayList2)

I'm not too familiar with C#.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文