2014-07-06 83 views
1

我有了一個任務ID,日期和註釋字段類似於這樣一個結構:創建列表的地圖?

type Journal struct { 
    task_id int 
    date int 
    comment string 
} 

對於每個TASK_ID,我是創建該TASK_ID所有期刊的列表。然後,我想將每個日記列表放入地圖中,以便我可以輕鬆管理每個任務ID。以下是一些示例數據:

100, 20140701, "Failed to complete" 
100, 20140702, "Removed data and finished in 5 minutes" 

120, 20140701, "No issues" 

130, 20140701, "Called analyst" 
130, 20140702, "reloaded data" 
130, 20140703, "Emailed results" 

現在我不確定是否需要對意見進行排序才能知道它們發生的日期。

如何創建列表地圖?我沒有看到任何可以「製作」列表的例子。

x := make(map[int]Journal) 
+0

什麼是你的問題? – Elwinar

+0

這是一個切片,而不是一個列表,也請記住Go中的地圖是不需要的。如果您想對日誌片段進行排序,請選中[this](http://golang.org/pkg/sort/#example_Interface)。 – OneOfOne

回答

3

您可以創建map要使用此代碼:

var m = make(map[int][]Journal) 
for _, journal := range all_my_journals { 
    m[journal.task_id] = append(m[journal.task_id], journal) 
} 

假設all_my_journals是你把所有的Journal變量的切片(或陣列)。

那麼,你可以擁有所有的Journal個給定id的切片(而不是列表):

journals := m[my_task_id] 
2

添加到Julienc的出色答卷,如果你的目的是爲了能夠進行排序期刊,你可以使用實現sort.Interfacethis一個結構:

type JournalSorter struct { 
    s []*Journal 
    f func(a, b *Journal) bool 
    rev bool 
} 

func NewSorter(j []*Journal) (js *JournalSorter) { 
    js = &JournalSorter{s: make([]*Journal, len(j))} 
    for i := range j { 
     js.s[i] = j[i] 
    } 
    return 
} 
func (js *JournalSorter) ById(reverse bool) []*Journal { 
    js.rev = reverse 
    js.f = js.byId 
    sort.Sort(js) 
    return js.s 
} 

func (js *JournalSorter) ByDate(reverse bool) []*Journal { 
    js.rev = reverse 
    js.f = js.byDate 
    sort.Sort(js) 
    return js.s 
} 

func (js *JournalSorter) byId(a, b *Journal) bool { 
    if js.rev { 
     return a.Id > b.Id 
    } 
    return a.Id < b.Id 
} 

func (js *JournalSorter) byDate(a, b *Journal) bool { 
    if js.rev { 
     return a.Date > b.Date 
    } 
    return a.Date < b.Date 
} 

func (js *JournalSorter) Len() int { 
    return len(js.s) 
} 

func (js *JournalSorter) Swap(i, j int) { 
    if js.s != nil && js.f != nil { 
     js.s[i], js.s[j] = js.s[j], js.s[i] 
    } 
} 

func (js *JournalSorter) Less(i, j int) bool { 
    if js.f != nil { 
     return js.f(js.s[i], js.s[j]) 
    } 
    return false 
} 
///................. 

func main() { 
    journals := m[my_task_id] //m = map[int][]*Journal 
    s1 := NewSorter(journals) 
    sorted_by_reverse_date := s1.ByDate(true) 
}