コード例 #1
0
        public static IEnumerable <IndexedMeme> QueryTagCombination(string[] s, TagCombiner mode = TagCombiner.AND)
        {
            IEnumerable <IndexedMeme> tagQuery;

            switch (mode)
            {
            case TagCombiner.AND:
                tagQuery = _base.IndexedWhere(x => s.All(y => x.Tags.Contains(y)));
                break;

            case TagCombiner.NAND:
                tagQuery = _base.IndexedWhere(x => !s.All(y => x.Tags.Contains(y)));
                break;

            case TagCombiner.OR:
                tagQuery = _base.IndexedWhere(x => s.Any(y => x.Tags.Contains(y)));
                break;

            case TagCombiner.NOR:
                tagQuery = _base.IndexedWhere(x => !s.Any(y => x.Tags.Contains(y)));
                break;

            case TagCombiner.MAXCOUNT:
                var tempQuery = _base.Select(x => (x, x.Tags.Count(y => s.Contains(y))));
                int maxMatch  = tempQuery.Max(x => x.Item2);
                tagQuery = tempQuery.Where(x => x.Item2 == maxMatch).Select(x => new IndexedMeme(x.x, _base.IndexOf(x.x)));
                break;

            default:
                throw new NotImplementedException(mode.ToString() + " ist nicht implementiert");
            }

            return(tagQuery);
        }
コード例 #2
0
        public static IndexedMeme ProcessTagCombination(string[] s, TagCombiner mode = TagCombiner.AND)
        {
            var tagQuery = QueryTagCombination(s, mode);

            if (!tagQuery.Any())
            {
                return(new IndexedMeme(null, -1));
            }

            var m = tagQuery.Rand();

            return(m);
        }