Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#查找对象数组之间的差异_C#_Arrays - Fatal编程技术网

C#查找对象数组之间的差异

C#查找对象数组之间的差异,c#,arrays,C#,Arrays,我有一个名为props的数组,它包含n个带有对象的数组,所有数组都包含相同数量的对象 每个对象都有4个属性:已启用参与、名称、已启用路径、id,这些属性可以在其他数组中为相同的属性id设置不同的值 我的目标是找到其他对象数组中不同的所有对象属性,并将它们存储在另一个名为diff的数组中 例如: [ [ {participation_enabled:"false", name:"PropEins", pathing_enabled:"true", id:"prop1"}, {

我有一个名为props的数组,它包含n个带有对象的数组,所有数组都包含相同数量的对象

每个对象都有4个属性:已启用参与、名称、已启用路径、id,这些属性可以在其他数组中为相同的属性id设置不同的值

我的目标是找到其他对象数组中不同的所有对象属性,并将它们存储在另一个名为diff的数组中

例如:

[
  [
    {participation_enabled:"false", name:"PropEins", pathing_enabled:"true", id:"prop1"}, 
    {participation_enabled:"false", name:"User Status", pathing_enabled:"false", id:"prop2"}, 
    {participation_enabled:"false", name:"Initial ID", pathing_enabled:"false", id:"prop3"}, 
    {participation_enabled:"false", name:"User ID", pathing_enabled:"false", id:"prop4"}, 
    {participation_enabled:"false", name:"Subdomain", pathing_enabled:"false", id:"prop5"}
  ], 
  [
    {participation_enabled:"false", name:"PropEins", pathing_enabled:"false", id:"prop1"}, 
    {participation_enabled:"false", name:"Room", pathing_enabled:"false", id:"prop2"}, 
    {participation_enabled:"false", name:"Phase", pathing_enabled:"false", id:"prop3"}, 
    {participation_enabled:"false", name:"Custom Insight 4", pathing_enabled:"false", id:"prop4"}, 
    {participation_enabled:"false", name:"Subdomain", pathing_enabled:"false", id:"prop5"}
  ], 
  [
    {participation_enabled:"true", name:"PropEins", pathing_enabled:"true", id:"prop1"}, 
    {participation_enabled:"true", name:"User Status", pathing_enabled:"true", id:"prop2"}, 
    {participation_enabled:"true", name:"Trackingcode", pathing_enabled:"true", id:"prop3"}, 
    {participation_enabled:"false", name:"User ID", pathing_enabled:"false", id:"prop4"}, 
    {participation_enabled:"false", name:"Subdomain", pathing_enabled:"false", id:"prop5"}
  ]
]
执行后,
diff
数组应为:

[
  {id:"prop1", participation_enabled:["false","true"], pathing_enabled:["false","true"], index:0},
  {id:"prop2", participation_enabled:["false","true"], name:["User Status","Room"], participation_enabled:["false","true"], pathing_enabled:["false","true"], index:1},
  {id:"prop3", participation_enabled:["false","true"], name:["Initial ID","Phase","Trackingcode"], participation_enabled:["false","true"], pathing_enabled:["false","true"], index:2},
  {id:"prop4", name:["User ID","Custom Insight 4"], pathing_enabled:["false","true"], index:3}
]
这是如何使用
javascript
下划线js实现的:

var diff = {};
a.forEach(function(val, i){
  //first just init start object
  if (i == 0) {
    val.forEach(function(v1, ind){
      diff[v1.id] = {};
      diff[v1.id].index = [ind];
      for (var key in v1) {
        diff[v1.id][key] = [v1[key]];
      }
    });
  }
  else {
    //for all other values add them into array and remove dups
    val.forEach(function(v1){
      var id = v1.id;
      for (var key in v1) {
        diff[id][key].push(v1[key]);
      }
    });
  }
});

//now finalize data removing all that have only unique values
for (var key in diff) {
  var nested = diff[key];
  var index = nested.index.pop();
  for (nestedKey in nested) {
    nested[nestedKey] =  _.filter(nested[nestedKey], function(item, pos) {
      return nested[nestedKey].indexOf(item) == pos;
    });

    if (nested[nestedKey].length < 2) {delete nested[nestedKey];}

  }
  diff[key].id = key;
  diff[key].index = index
  if (_.keys(diff[key]).length < 3) {delete diff[key];}
}

diff = _.values(diff);
var diff={};
a、 forEach(函数(val,i){
//首先只是初始化启动对象
如果(i==0){
val.forEach(函数(v1,ind){
diff[v1.id]={};
diff[v1.id]。索引=[ind];
for(v1中的var键){
diff[v1.id][key]=[v1[key];
}
});
}
否则{
//对于所有其他值,将它们添加到数组中并删除DUP
val.forEach(函数(v1){
var-id=v1.id;
for(v1中的var键){
diff[id][key]。推送(v1[key]);
}
});
}
});
//现在完成数据删除所有只有唯一值的数据
for(差异中的var键){
var嵌套=diff[key];
var index=nested.index.pop();
for(嵌套中的嵌套键){
嵌套的[nestedKey]=过滤器(嵌套的[nestedKey],函数(项目,位置){
返回嵌套的[nestedKey].indexOf(item)==pos;
});
if(nested[nestedKey].length<2){delete nested[nestedKey];}
}
diff[key].id=key;
diff[key]。index=index
如果(u.keys(diff[key]).length<3){delete diff[key];}
}
差异=u.值(差异);

任何建议和想法都会对我有很大帮助…

请看一下
IEqualityComparer
()和
,除了
()


一种方法可以是创建一个自定义比较器,然后逐个比较数据。或者,您可以对所有元素进行分组,但不包括出现次数较多的元素。

到目前为止,您为实现目标做了哪些尝试?我真的不知道从哪里开始,因为我以前没有使用C#中的对象。。。