gpt4 book ai didi

c# - 实现具有某些限制的 JOIN 的算法

转载 作者:行者123 更新时间:2023-11-29 06:48:34 25 4
gpt4 key购买 nike

让我用一个真实的例子来解释我的匹配问题(这个问题是通用的)。假设有 2 个列表:从不同的源加载“选择”该列表没有重复项。

假设 mkTPL.Selections 和 mkDB.Selections 来自 SQL 表,每个表在 id 和选择名称上都有唯一索引。问题是有时 IdSelectionType 为 null(在 mkTPL.Selections 的选择中)

foreach (var selTPL in mkTPL.Selections)
{
foreach (var selDB in mkDB.Selections)
{
if (selTPL.IsTheSame(selDB))
selTPL.OddOrResultValue = selDB.OddOrResultValue;
}
}

public bool IsStessaSelezione(SelectionPrints selDb)
{
if (selDb.IdSelectionType == this.IdSelectionType)
return true;
else
{
bool isSameName = selDb.Name == this.Name;

bool isSimilarName = false;
if (!isSameName)
{
isSimilarName = RegexReplace(selDb.Name, @"\([\d.]+\)") == RegexReplace(this.Name, @"\([\d.]+\)");
}

return isSameName || isSimilarName;
}
}
<小时/>

我实现的匹配算法效率不高。一旦选择匹配,我就不应该尝试将其与其他选择进一步匹配(因为 id 和选择名称上的唯一索引)。

Linq 可以为我提供一个简单的解决方案吗?

最佳答案

首先,当您找到匹配项时,您应该中断:

foreach (var selTPL in mkTPL.Selections)
{
foreach (var selDB in mkDB.Selections)
{
if (selTPL.IsTheSame(selDB))
{
selTPL.OddOrResultValue = selDB.OddOrResultValue;

break; // <--
}
}
}

其次,我会创建一个 mkDB.Selections 字典,在其中存储正则表达式值,这样您就不必在每次迭代时一遍又一遍地进行计算。

类似于:

var mkDBDictionary = mkDB.Selections.ToDictionary(s => RegexReplace(s.Name, @"\([\d.]+\)"), s => s);

foreach (var selTPL in mkTPL.Selections)
{
string selTPLName = RegexReplace(selTPL.Name, @"\([\d.]+\)");

if (mkDBDictionary.TryGetValue(selTPLName, out var selDB))
{
selTPL.OddOrResultValue = selDB.OddOrResultValue;
}
}

关于c# - 实现具有某些限制的 JOIN 的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48418868/

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