2012-12-04 61 views
1

我有以下過程纔是最重要的文檔頻率doctionary的每個條目(頻率)陣列不允許負索引C#

foreach (var termIndex in freq.Select(entry => GetTermIndex(entry.Key))) 
     {                
      _docFreq[i][termIndex]++; 
     } 

,也爲越來越項指數

rivate int GetTermIndex(string term) 
    { 
     int i; 
     if (_wordsIndex.TryGetValue(term, out i)) 
      return i; 
     else 
      return 0; 
    } 
程序

其中,所有術語都在另一個詞典(_wordsIndex)中編入索引。

基於上述過程,如果freq中的entry.Key不存在,那麼GetTermIndex將返回0,並且將計數_docFreq(_docFreq [i] [0]),那就是問題所在。 那麼,如何避免計數entry.Key不存在?我試圖做類似

rivate int GetTermIndex(string term) 
    { 
     int i; 
     if (_wordsIndex.TryGetValue(term, out i)) 
      return i; 
     else 
      return -1; 
    } 

但當然錯誤「索引數組的範圍之外」出現,因爲沒有指數_docFreq [I] [ - 1]。

請幫忙嗎?非常感謝

回答

5

只是不要指望它,如果termIndex是-1:

foreach (var termIndex in freq.Select(entry => GetTermIndex(entry.Key))) 
{ 
    if (termIndex >= 0) 
     _docFreq[i][termIndex]++; 
} 

或使用LINQ Where

foreach (var termIndex in freq.Select(entry => GetTermIndex(entry.Key)).Where(ti => ti >= 0)) 
{ 
    _docFreq[i][termIndex]++; 
} 
+0

非常感謝馬丁... :) – FSm

1

檢查值函數返回:

foreach (var termIndex in freq.Select(entry => GetTermIndex(entry.Key))) { 
    if (termIndex != -1) { 
    _docFreq[i][termIndex]++; 
    } 
} 

或者:

foreach (var termIndex in freq.Select(entry => GetTermIndex(entry.Key)).Where(i => i != -1)) { 
    _docFreq[i][termIndex]++; 
} 
+0

非常感謝你Guffa – FSm

1

如何

foreach (var termIndex in freq.Select(entry => GetTermIndex(entry.Key)).Where(index=>index>=0)) 
    {                
     _docFreq[i][termIndex]++; 
    } 
+0

非常感謝賈斯汀 – FSm

1

確保跳過這些無效值:

foreach (var termIndex in freq.Select(entry => GetTermIndex(entry.Key))).Where(x => x >= 0) 
    {                
     _docFreq[i][termIndex]++; 
    } 
+0

非常感謝Rane ...... :) – FSm