C# 如何使用c执行时间比较2个数组中的单个属性应该是最小的

C# 如何使用c执行时间比较2个数组中的单个属性应该是最小的,c#,arrays,C#,Arrays,我有两个数组变量和值,如下所示 arraydata1 = [ { "id": "1", "name": "aaa" }, { "id": "2", "name": "bbb" }, { "id": "3", "name": "ccc" }, { "id": "4", "name": "ddd" }, { "id": "12", "name": "aaa" } ] 及 我想比

我有两个数组变量和值,如下所示

arraydata1 =

[
  {
    "id": "1",
    "name": "aaa"
  },
  {
    "id": "2",
    "name": "bbb"
  },
  {
    "id": "3",
    "name": "ccc"
  },
  {
    "id": "4",
    "name": "ddd"
  },
  {
    "id": "12",
    "name": "aaa"
  }
]

我想比较arraydata1.name==arraydata2.tablename,如果匹配,则从arraydata1形成新数组

输出为-

[
      {
        "id": "1",
        "name": "aaa"
      },
      {
        "id": "2",
        "name": "bbb"
      },
    {
    "id": "12",
    "name": "aaa"
   }
    ]

我在arraydata1中有2000多条记录要比较,如何减少时间。我可以使用普通的foreach,但比较起来会花费太多时间


我在用2 foreach做内部逻辑应用程序,所以这需要时间。因此我认为最好使用c代码。

一个Linq解决方案可以如下所示:

var tableNameKeys = arraydata2.Select(t => t.tablename).ToHashSet();
var resultArray = arraydata1.Where(x => tableNameKeys.Contains(x.name)).ToArray();
这种方法的优点是

。。。这是一个O1操作

结果:


顺序重要吗?如果arraydata1中有多个同名的元素,您希望输出中有多个元素吗?arraydata2中是否有多个元素具有相同的表名?我强烈怀疑LINQ连接可以实现这一点,但我们确实需要先了解更多信息。请发布有问题的代码。你怎么比较?您是如何循环的?您是否尝试过创建一个字典,其中key是一个名称,value是数组中的一个项?是否要保留重复的名称?或者你只需要第一个,或者最后一个或者?但是要比较在你的机器上用多长时间会花费太多的时间?在两个数组中都有2300多个条目,我得到了大约120毫秒的2个循环的运行时间。这已经太长了吗?
var tableNameKeys = arraydata2.Select(t => t.tablename).ToHashSet();
var resultArray = arraydata1.Where(x => tableNameKeys.Contains(x.name)).ToArray();