>

일치하는 문제와 일치하는 문제를 설명해 드리겠습니다 (문제는 일반적인 것임).2 개의 목록: of of"선택"이 다른 소스에서로드 된 것으로 가정합니다.목록에 중복 항목이 없습니다.

mkTPL.Selections와 mkDB.Selections는 각각 ID와 선택 이름에 대한 고유 색인이있는 SQL 테이블에서 나온다고 가정 해 봅시다. 문제는 때때로 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와 일치하지 않아야합니다 (ID 및 선택 이름의 고유 색인 때문에).

Linq가 나에게 쉬운 솔루션을 제공 할 수 있을까요?

  • 답변 # 1

    먼저, 당신은 break 해야  일치하는 것을 발견했을 때 :

    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 #의 저장 프로 시저에 매개 변수 전달
  • 다음 php - MYSQL 시작 종료 날짜 날짜 형식 d-m-Y 중에서 선택