2016-11-28 4 views
3

ちょうどgoLangの学習を開始しました。構造体/結果の時系列の逆順

Goで構造要素を逆順に並べ替えるにはどうすればいいですか?さんが言ってみましょう、私はなどのように、データベースに何かから結果を取得しています:

var results []<someClass> 
collection.C(results).Find(bson.M{"<someid>":<id_val>}).All(&results) 

、私は私のデータベースオブジェクト/スライスresultsで利用可能な結果を​​持っています。時間と呼ばれる列の逆順でスライスresultsを並べ替えるにはどうすればよいですか?

var results []YourType 
err := sess.DB("").C("collname").Find(bson.M{"someid": "someidval"}). 
    Sort("-timefield").All(&results) 

あなたができないか、これを行うにはしたくない何らかの理由で、あなたがsortパッケージを利用することができる場合は、次の

+1

MongoDBから結果を取得していますか? – notionquest

+0

@notionquest、はい。 –

答えて

4

最も簡単にはMongoDBのがレコードをソートできるようになります。 sort.Interfaceを実装する必要があります。例えば

type YourType struct { 
    SomeId string 
    Timestamp time.Time 
} 

type ByTimestamp []YourType 

func (a ByTimestamp) Len() int   { return len(a) } 
func (a ByTimestamp) Swap(i, j int)  { a[i], a[j] = a[j], a[i] } 
func (a ByTimestamp) Less(i, j int) bool { 
    return a[i].Timestamp.After(a[j].Timestamp) 
} 

このByTimestampタイプは、YourTypeのスライスであり、そしてLess()方法を決定するためにTime.After()を使用するための要素とインデックスiインデックスjの要素より小さい場合、それは逆のタイムスタンプの順序を定義。

そして(Go Playground上でそれを試してみてください)、それを使用して:

var results []YourType 

// Run your MongoDB query here 

// Now sort it by Timestamp decreasing: 
sort.Sort(ByTimestamp(results)) 

Less()ための代替実装がTime.Before()を使用することではなく、インデックスiにインデックスjの要素を比較します:

func (a ByTimestamp) Less(i, j int) bool { 
    return a[j].Timestamp.Before(a[i].Timestamp) 
} 

Go Playgroundでこの亜種を試してみてください。

+0

答えをありがとう。私はあなたの意図も理解していました。 –

関連する問題