C# 用字典中的唯一字符串替换重复项<;字符串,列表<;对象>&燃气轮机;
我有C# 用字典中的唯一字符串替换重复项<;字符串,列表<;对象>&燃气轮机;,c#,linq,C#,Linq,我有列表。Parameters和ParametersDetails类如下- public class ParameterDetails { public string Name { get; set; } public List<Parameter> Parameters{get;set;} } public class Parameter { public string Name { get; set;
列表
。Parameters和ParametersDetails类如下-
public class ParameterDetails
{
public string Name { get; set; }
public List<Parameter> Parameters{get;set;}
}
public class Parameter
{
public string Name { get; set; }
public string Type { get; set; }
public string Value { get; set; }
public string AccountName { get; set; }
}
接下来,我从列表中选择项目
parameterdetails.Select(x => x.Parameters.Where(p => p.Name == dupeList.Key.ToString())).ToList();
现在,我不想通过参数detials列表来修改这些项。 有更简单的方法吗 前 我在ParameterDetails中有两项,如-
ParameterDetails:
[
{
name: "test1",
Parameters:[
{
"Name":"param1",
"Type":"paramtype1",
"Value":"value1",
"AccountName":"accname1"
},
{
"Name":"param2",
"Type":"paramtype2",
"Value":"value2",
"AccountName":"accname2"
}]
},
{
name: "test2",
Parameters:[
{
"Name":"param1",
"Type":"paramtype11",
"Value":"value11",
"AccountName":"accname11"
},
{
"Name":"param2",
"Type":"paramtype22",
"Value":"value22",
"AccountName":"accname22"
}]
}]
如果我使用param1作为重复名称,因此我希望将其替换为“param1+test2”,这样它将是唯一的。如果您在列表中发现重复项,您可以使用
LINQ
,这是使用它的代码:
var duplicates = dflist.GroupBy(s => s) .SelectMany(grp => grp.Skip(1));
该代码将返回dflist
中的所有重复项。如果要选择具有唯一属性值的所有对象,可以使用以下代码行:
var withoutNameDuplicates = dflist.GroupBy(s => s.Name).Select(grp => group.First());
然后,您可以使用以下代码将objectsName
属性更改为复制的对象:
var nameChangedDuplicates = duplicates.Select( s => {s.Name = s.Name + "something"; }).ToList();
如果只想从列表中获取不重复的所有项目,可以将Dinstinct()
方法应用于dflist
,该方法将返回IEnumerable
结果:
var withoutDuplicates = dflist.Distinct();
而且,如果要返回列表
而不是IEnumerable
,则必须使用ToList()
方法,如下所示:
var withoutDuplicates = dflist.Distinct().ToList();
您可以在以下页面中获得更多信息:
关键是什么?当然可以。您能告诉我们您已经尝试了什么以及您的具体问题在哪里吗?在所有列表中或在每个列表中重复?如果是第二个,为什么不创建一个
字典
,其中内部字典的键是参数名?请查看我已修改的代码“现在我不想通过参数列表循环修改项目”为什么不?循环是修改集合中项目的完美工具。不要为此使用LINQ,它应该仅用于查询某些内容。我没有将整个项作为重复项,我只有名称重复项来自参数
var withoutDuplicates = dflist.Distinct().ToList();