鉴于我有一个看起来像这样的模型:
public sealed class BaseInfo
{
public string ValueToBeMatched { get; set; }
public string CreatedValue { get; set; }
}
我有初始化BaseInfo
类的变量,如下所示:
List<BaseInfo> zeroBaseInfo = new List<BaseInfo>
{
new BaseInfo
{
ValueToBeMatched = "001",
CreatedValue = "2008-10-10"
},
new BaseInfo
{
ValueToBeMatched = "003",
CreatedValue = "2007-10-10"
},
}
List<BaseInfo> firstBaseInfo = new List<BaseInfo>
{
new BaseInfo
{
ValueToBeMatched = "002",
CreatedValue = "2006-10-10"
},
new BaseInfo
{
ValueToBeMatched = "001",
CreatedValue = "2008-10-10"
},
}
List<BaseInfo> secondBaseInfo= new List<BaseInfo>
{
new BaseInfo
{
ValueToBeMatched = "001",
CreatedValue = "2008-10-10"
},
new BaseInfo
{
ValueToBeMatched = "002",
CreatedValue = "2006-10-10"
},
}
List<BaseInfo> thirdBaseInfo = new List<BaseInfo>
{
new BaseInfo
{
ValueToBeMatched = "002",
CreatedValue = "2006-10-10"
},
new BaseInfo
{
ValueToBeMatched = "001",
CreatedValue = "2008-10-10"
},
}
List<BaseInfo> fourthBaseInfo = new List<BaseInfo>
{
new BaseInfo
{
ValueToBeMatched = "",
CreatedValue = DateTime.Now.ToString("yyyy-MM-dd")
},
new BaseInfo
{
ValueToBeMatched = "001",
CreatedValue = "2008-10-10"
},
}
条件是5个列表必须相互匹配2个或更多匹配,然后它将存储到新列表中以获取结果。
我正在考虑对每个列表使用 for 循环,并使每个循环中的 if 语句与条件与列表的每个索引相匹配。但我被困住了。
这是我坚持的代码:
for (int i = 0; i < zeroBaseInfo.Count; i++)
{
for (int j = 0; j < firstBaseInfo.Count; j++)
{
for (int k = 0; k < secondBaseInfo.Count; k++)
{
for (int o = 0; o < thirdBaseInfo.Count; o++)
{
for (int p = 0; p < fourthBaseInfo.Count; p++)
{
// I am stuck in this point to what needs to be compare, as if statement only works against comparison value between 1 to 1 and not all of lists.
}
}
}
}
}
编辑:
预期输出:
List<BaseInfo> matchedNewLists = new List<BaseInfo>
{
new BaseInfo
{
ValueToBeMatched = "001",
CreatedValue = "2006-10-10"
},
new BaseInfo
{
ValueToBeMatched = "002",
CreatedValue = "2008-10-10"
}
}
由于001
并且002
满足上述 5 个列表中的条件(2 个匹配项或更多)
非常感谢任何帮助和您的回答。
非常感谢!
这可以通过一些 LINQ 操作来完成。我将它们分开以明确我在这里做什么:
var oneLongList = new[] { zeroBaseInfo, firstBaseInfo, secondBaseInfo, thirdBaseInfo, fourthBaseInfo }.SelectMany(x => x);
var allValuesToBeMatched = oneLongList.Select(x => x.ValueToBeMatched);
var grouped = allValuesToBeMatched.GroupBy(x => x);
var filtered = grouped.Where(x => x.Count() >= 2).Select(x => x.Key);
var finalResult = filtered.Select(x => new BaseInfo { ValueToBeMatched = x });
或者您可以将它们合二为一:
var finalResult = new[] { zeroBaseInfo, firstBaseInfo, secondBaseInfo, thirdBaseInfo, fourthBaseInfo }
.SelectMany(x => x)
.Select(x => x.ValueToBeMatched)
.GroupBy(x => x)
.Where(x => x.Count() >= 2)
.Select(x => new BaseInfo { ValueToBeMatched = x.Key });
编辑:
var finalResult = new[] { zeroBaseInfo, firstBaseInfo, secondBaseInfo, thirdBaseInfo, fourthBaseInfo }
.SelectMany(x => x)
.GroupBy(x => x.ValueToBeMatched)
.Where(x => x.Count() >= 2)
.Select(x => x.First());
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句