Ejemplo n.º 1
0
        public List <string> getSongs(int numberOfSongs, EmotionSpaceDTO emotionSpaceDTO)
        {
            Dictionary <string, EmotionSpaceDTO> songs          = new Dictionary <string, EmotionSpaceDTO>();
            Action <SQLiteDataReader>            addSongsToDict = (rdr) =>
            {
                while (rdr.Read())
                {
                    EmotionSpaceDTO point = new EmotionSpaceDTO();
                    point.Energy            = rdr.GetDouble(1);
                    point.Positivity        = rdr.GetDouble(2);
                    songs[rdr.GetString(0)] = point;
                }
            };

            getAllSongs(addSongsToDict);
            if (songs.Count < numberOfSongs)
            {
                numberOfSongs = songs.Count;
            }
            List <SongDistance> closeSongs = new List <SongDistance>(numberOfSongs);


            double farPoint = double.MinValue;

            foreach (KeyValuePair <string, EmotionSpaceDTO> kvp in songs)
            {
                SongDistance val = new SongDistance();
                val.distance = getDistance(emotionSpaceDTO, kvp.Value);
                val.song     = kvp.Key;
                if (closeSongs.Count < numberOfSongs)
                {
                    closeSongs.Add(val);
                    if (farPoint < val.distance)
                    {
                        farPoint = val.distance;
                    }
                }
                else
                {
                    if (val.distance < farPoint)
                    {
                        closeSongs.Add(val);
                        closeSongs.Sort(compareDistance);
                        closeSongs.RemoveAt(closeSongs.Count - 1);
                    }
                }
            }

            List <string> ret = new List <string>();

            foreach (SongDistance finalVal in closeSongs)
            {
                ret.Add(finalVal.song);
            }
            return(ret);
        }
Ejemplo n.º 2
0
 private int compareDistance(SongDistance a, SongDistance b)
 {
     return(a.distance.CompareTo(b.distance));
 }