gpt4 book ai didi

c# - 根据较小的比较字符串中的最少 N 个字符确定重复项

转载 作者:行者123 更新时间:2023-12-02 14:28:43 26 4
gpt4 key购买 nike

我有两个列表,都包含共享公共(public)字段 ID(字符串值)的模型。我正在比较 ID 是否重复。

我当前有一个 LINQ 语句来确定重复的 ID 值,该语句将它们存储到字符串列表中:

List<string> duplicateRecords = testData.TestRecords.GroupBy(aa => aa.ID).Where(x => x.Count() > 1).Select(y => y.Key).ToList();

第二个 LINQ 语句根据重复的 ID LINQ 结果映射受尊重模型的列表:

List<Model> modelRecords = testData.Models.Where(x => duplicateRecords.Any(y => x.ID == y)).ToList();

这两个 LINQ 语句完全符合我的预期,这非常棒。但现在最近有一个请求,要求在比较过程中根据 ID 的最少 N 个字符来确定重复的 ID。此最小 N 次比较必须针对字符串中的最后 N 个字符进行。

EX)

  • ID1: 123 == ID2: 123
  • ID1: 0123 == ID2: 123
  • ID1: 123 == ID2: 0123
  • ID1:1230!=ID2:123
  • ID1:123!=ID2:1230
  • ID1: 122110123 == ID2: 123

希望这些例子能让我深入了解我试图解决的问题。这可以使用 foreach 循环来完成,但我发现代码在复杂的列表查询上变得非常困惑且难以管理。

所以我的问题是这样的: 如何使用两个比较字符串中较小的一个的最后 N 个字符来使用 LINQ 确定重复项?

注意:我也非常愿意采用更多优雅的方式来解决这个问题,非常感谢排除任何 for foreach 解决方案。

最佳答案

我假设当输入包含 1230123 时,您希望结果同时包含它们

var input = new List<Model>()
{
new Model {ID = "123"},
new Model {ID = "0123"},
new Model {ID = "1230"},
new Model {ID = "12"},
new Model {ID = "122110123"}
};

var result = input.Where(x => input.Any(y => y != x && (y.ID.EndsWith(x.ID) || x.ID.EndsWith(y.ID)))).ToList();
\\this will return 123, 0123 and 122110123

如果您想再次检查现有的 duplicateRecords 列表,那么这应该可行:

List<Model> modelRecords = testData.Models.Where(x => duplicateRecords.Any(y => x.ID.EndsWith(y) || y.EndsWith(x.ID))).ToList();

关于c# - 根据较小的比较字符串中的最少 N 个字符确定重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60534856/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com