В какой коллекции хранить группы пользователей? - PullRequest
0 голосов
/ 29 июля 2009

Я хочу сделать коллекцию, которая хранит группы пользователей. Пользователь может быть членом нескольких групп, группы могут быть вложенными, выбор группы должен возвращать отдельный IEnumerable <user>.

Конечно, я мог бы написать это с нуля, используя стандартные коллекции List <T>, Dictionary <<code>T, U> и т. Д., Но есть ли встроенная коллекция, которая уже демонстрирует большую часть этого поведения?

Спасибо!

Ответы [ 4 ]

2 голосов
/ 29 июля 2009

Я бы сделал что-то вроде этого:

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List<User> users = new List<User>
        {
            // use a List<T> to hold the users themselves
        };
    }
}

class Group
{
    public Group NestedGroup { get; set; }
}

class User
{
    // Store the groups in a HashSet<T> to keep
    // a distinct list.
    HashSet<Group> groups;

    public IEnumerable<Group> Groups
    {
        get { return groups; }
    }
}

Использование List<T> для удержания самих пользователей должно быть в порядке. Обратите внимание, что свойство Groups типа User отображается как IEnumerable<Group>, но реализовано внутри как HashSet<Group>, чтобы позволить вам вести отдельный список по вашему желанию.

0 голосов
/ 29 июля 2009

Похоже, вам нужна старая добрая реляционная база данных. Добавьте SQLite и идите, если можете.

В противном случае ... я иногда делал это через несколько словарей и списков. У вас есть словарь групп, каждая группа представляет собой список. Затем еще один словарь для хранения пользователей по ключу какого-то рода. Таким образом, каждый пользователь может существовать в нескольких группах.

0 голосов
/ 29 июля 2009

Я думаю, что использование List<T> будет работать для сохранения этой информации. У вас могут быть Группы с родительской группой и списком дочерних групп, и каждая группа содержит список участников или что-то подобное.

С точки зрения возврата IEnumerable<User> - это можно сделать, используя Enumerable.SelectMany . Взгляните на образец MSDN там - они похожи на домашних животных и владельцев, где есть несколько элементов, охватывающих несколько коллекций.

0 голосов
/ 29 июля 2009

Я бы подумал, что универсальный List<T> будет работать (где T - класс, который содержит вашего пользователя).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...