2017-09-13 1 views
1

C 한 LINQ 쿼리 (하지 하위 쿼리)에이 코드가 있습니다목록 및 사전 #

for (int i = 0; i < _smartBoostItems.Count; i++) 
{ 
    foreach (var condition in _levelConditionsDict) 
    { 
     if (_smartBoostItems[i].progression_to_finish >= level.PercentsLeftToLevelCompleteWhileTurnType 
      && _smartBoostItems[i].condition 
      && _smartBoostItems[i].condition_id == condition.Key) 
     { 
      _availibleSmartBoosts.Add(_smartBoostItems[i]); 
     } 
    } 
}  

_smartBoostItems를 - 그것은 List<SmartBoostLibItem>
_levelConditionsDict - 그것은 내가이 코드를 변환 할 수있는 방법 Dictionary<int, int>

입니다 linq 쿼리? 아니면 더 나쁠까요? 나는이 중첩 된 루프를 좋아하지 않는다. 너무 많은 요소가 없다. 약 500 회 반복됩니다.

+1

에도 LINQ가 –

+0

당신은 당신의 코드가 시도하는 설명 시겠어요, 당신은 단지 그들을 볼 수 없습니다 루프를 사용해야합니까? 우리는 이것을 무료로하고 있으며, 코드 작성을 훨씬 쉽게 할 것입니다. –

+0

코드에 어떤 멋진 프레임 워크를 사용하더라도 모든 항목 조합을 평가해야합니다. 성능 문제가없는 한''읽기 쉽고 유지하기 쉬운 것이 무엇입니까? '라고 물어봐야합니다. 성능상의 문제가 있다면 모든 정보의 조합을 모두 검사하지 않고 동일한 정보를 얻을 수있는 방법을 묻는 것이 필요합니다 항목. – user1304444

답변

2

당신은 더 효율적이 쿼리를 사용할 수 있습니다

_availibleSmartBoosts = _smartBoostItems 
    .Where(i=> i.progression_to_finish >= level.PercentsLeftToLevelCompleteWhileTurnType 
      && i.condition && _levelConditionsDict.ContainsKey(i.condition_id)) 
    .ToList(); 
+0

첫 번째 조건이 거짓이면 단락이 발생하므로 ContainsKey를 실행하지 않아도됩니다. –

+0

@ YairHalberstadt 원래 질문의 'if'문은 또한 충족되는 첫 번째 조건에서 건너 뜁니다. – user1304444

+0

고마워, 그게 내가 찾고 있던거야. –