public List <UsersSimilarity> CreateUserSimilarities(ISettings settings, int userId, List <int> comparedUserId, BookScore[] userBooks, List <BookScore[]> comparedUserBooks, List <double?> similarity = null) { var userSimilarities = new List <UsersSimilarity>(); var comparer = new BookScoreEqualityComparer(); for (int i = 0; i < comparedUserId.Count; i++) { var comparedUserRatesForMutualBooks = comparedUserBooks[i].Intersect(userBooks, comparer).ToArray(); var userRatesForMutualBooks = userBooks.Intersect(comparedUserBooks[i], comparer).ToArray(); var booksUniqueForComparedUser = comparedUserBooks[i].Except(userBooks, comparer).ToArray(); var temp = new UsersSimilarity { AverageScoreForComparedUser = RandomNumber(3), ComparedUserId = comparedUserId[i], UserId = userId, Similarity = similarity?[i], SimilarityType = (int)settings.SimilarityDistance, ComparedUserRatesForMutualBooks = comparedUserRatesForMutualBooks, BooksUniqueForComparedUser = booksUniqueForComparedUser, UserRatesForMutualBooks = userRatesForMutualBooks }; userSimilarities.Add(temp); } return(userSimilarities); }
public UsersSimilarity SelectMutualAndUniqueBooksForUsers(int userId, int comparedUserId) { var books1 = _context.GetBooksRatesByUserId(userId); var books2 = _context.GetBooksRatesByUserId(comparedUserId); var comparer = new BookScoreEqualityComparer(); var userRatesForMutualBooks = books1.Intersect(books2, comparer).ToArray(); if (userRatesForMutualBooks.Length == 0) { return(null); } var comparedUserRatesForMutualBooks = books2.Intersect(books1, comparer).ToArray(); var uniqueBooksForComparedUser = books2.Except(books1, comparer).ToArray(); return(new UsersSimilarity { BooksUniqueForComparedUser = uniqueBooksForComparedUser, UserRatesForMutualBooks = userRatesForMutualBooks, ComparedUserRatesForMutualBooks = comparedUserRatesForMutualBooks, UserId = userId, ComparedUserId = comparedUserId, AverageScoreForComparedUser = _context.GetAverageRateForUser(comparedUserId), }); }