2015-06-15 117 views
-2

我有這段代碼遍歷地圖並根據關係類型過濾一些字段,我必須運行兩個循環,並且感覺它對大地圖來說會很慢。有沒有什麼辦法可以讓技術/重構使代碼更高效。如何使此代碼更高效?

func getFields(filter map[string]map[string]bool, msg *Message) (fs []Field) { 

    for k, _ := range filter { 
     if relationString(msg) == k { 
      if fieldFilter, ok := filter[k]; ok { 
       for _, f := range msg.Fields { 
        if _, ok := fieldFilter[f.Name]; ok { 
         fs = append(fs, f) 
        } 
       } 
      } 
     } 
    } 
    return 
} 
+1

如果僅僅是爲了便於閱讀我會分解出深度嵌套語句。如果你擔心性能,*基準*。 (接口與這個有什麼關係?) – JimB

+0

哦,我搞砸了兩個想法,接口的想法是關於我用這個代碼做的其他事情,道歉。 – Varun

回答

1

你不需要外循環爲一體的改進:

func getFields(filter map[string]map[string]bool, msg *Message) (fs []Field) { 
    if fieldFilter, ok := filter[relationString(msg)]; ok { 
    for _, f := range msg.Fields { 
     if _, ok := fieldFilter[f.Name]; ok { 
      fs = append(fs, f) 
     } 
     } 
    } 
    } 

    return 
}