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();