Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Работа со списками List<> C#, очень надо!

70K
15 мая 2012 года
Silakoff
26 / / 04.05.2012
Имеется метод, в котором есть List<int> id, List <string> list1, List<string> list2. Мне нужно добавлять/считывать элементы списков list1 и list2 по выбору элемента из id, причем одному значению id может соответствовать различное количество значений как list1 так и list2. Подскажите, как реализовать это соответствие? Спасибо
70K
15 мая 2012 года
Silakoff
26 / / 04.05.2012
Возможно нужно создать список 2х списков? можно ли это и как с этим работать?
277
15 мая 2012 года
arrjj
1.7K / / 26.01.2011
Возможно нужно создать структуру и уже из нее список?
316
15 мая 2012 года
Alm3n
889 / / 29.05.2009
С этими структурами данных - никак. В C# нет подходящего стандартного класса, нужно писать что-то своё, например
 
Код:
List<KeyValuePair<int, string>> list = new List<KeyValuePair<int, string>>();
70K
15 мая 2012 года
Silakoff
26 / / 04.05.2012
Цитата: Alm3n
С этими структурами данных - никак. В C# нет подходящего стандартного класса, нужно писать что-то своё, например
 
Код:
List<KeyValuePair<int, string>> list = new List<KeyValuePair<int, string>>();



Да была такая идея..но беда в том что KeyValuePair не катит, у list1 и list2 может быть различная длина.

316
15 мая 2012 года
Alm3n
889 / / 29.05.2009
Цитата: Silakoff
[quote=Alm3n;49587]С этими структурами данных - никак. В C# нет подходящего стандартного класса, нужно писать что-то своё, например
 
Код:
List<KeyValuePair<int, string>> list = new List<KeyValuePair<int, string>>();



Да была такая идея..но беда в том что KeyValuePair не катит, у list1 и list2 может быть различная длина.[/quote]
Это ничего не меняет. Нужно заменить оба списка строк на списки пар.

 
Код:
foreach(id)
{
foreach(list1)
{}
foreach(list2)
{}
}
Лучше способа не вижу.
70K
15 мая 2012 года
Silakoff
26 / / 04.05.2012
Вот както так хочется записывать

MainList.Add(id1, list1.add(id2), list2.add(id3));

И так представлять себе вывод данных

MainList = id1,
id2.0, id3.0
id2.1 id3.1
id2.2 id3.2

Написано убого, знаю, но как то хочется приблизиться к ответу))
316
15 мая 2012 года
Alm3n
889 / / 29.05.2009
Тогда придётся писать свой класс.
277
15 мая 2012 года
arrjj
1.7K / / 26.01.2011
Цитата: Silakoff

Да была такая идея..но беда в том что KeyValuePair не катит, у list1 и list2 может быть различная длина.



И? В чем проблема? Почему не катит?

70K
15 мая 2012 года
Silakoff
26 / / 04.05.2012
Цитата: arrjj
[quote=Silakoff;82156]
Да была такая идея..но беда в том что KeyValuePair не катит, у list1 и list2 может быть различная длина.



И? В чем проблема? Почему не катит?[/quote]

Разве KeyValuePair не подразумевает, что key и value должны быть заполнены соответственно, а у меня key(i) может содержать value (i) = null.

277
15 мая 2012 года
arrjj
1.7K / / 26.01.2011
Ненене.

List<int> id;
List<KeyValuePair<int, string>> list1 = new List<KeyValuePair<int, string>>();
List<KeyValuePair<int, string>> list2 = new List<KeyValuePair<int, string>>();

Содержимое:
id 1 2 3 4 5 6 7 8 9
list1 (1,АА) (2,ББ) (2,ЦЦ) (4,ЭЭ)
list2 (5,АА) (6,ББ) (9,ЦЦ) (9,ЭЭ) (3,ХУ)
70K
15 мая 2012 года
Silakoff
26 / / 04.05.2012
а мне нужно содержимое:

id 1 2 3 4 5

list1(id=1) = A, B, C , E;
list2(id=1) = T,E,H;

list (id=2) = X,A,Z,L,T;
list2 (id=2) = X,S,S,W,Y,U,I;

и т.д.

т.е. list1 и list2 абсолютно не взаимосвязанные и по значению id из главного списка хранят различное кол-во значений.
40K
15 мая 2012 года
D129
228 / / 18.04.2012
Всегда, когда нужна связанность данных - надо писать класс.
И обьектами класса заполнять список.
Пусть будет много обькетов с одним и тем же ID и разными значениями других свойств (не будем вдаваться в подробности, что это уже не id, а скорее что-то типа Group или Category)

При этом можно перегрузить функцию этого класса ToString() и обеспечить вывод в нужном формате без проблем.
70K
15 мая 2012 года
Silakoff
26 / / 04.05.2012
ок, пишу свой класс :)
40K
15 мая 2012 года
D129
228 / / 18.04.2012
Вот что я имею в виду:

Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleClassSelector
{
    class Program
    {
        static void Main(string[] args)
        {

            List<ExampleUser> allData = new List<ExampleUser>();
            allData.Add(new ExampleUser()
            {
                Group = 1,
                Information = "AAABBB"
            });
            allData.Add(new ExampleUser()
            {
                Group = 1,
                Information = "CCCGGG"
            });
            allData.Add(new ExampleUser()
            {
                Group = 2,
                Information = "HHHRRR"
            });
            allData.Add(new ExampleUser()
            {
                Group = 2,
                Information = "CCCKKK"
            });
            allData.Add(new ExampleUser()
            {
                Group = 2,
                Information = "SSSRRR"
            });

            string exit = "";
            while (exit != "exit")
            {
                Console.WriteLine("Input group id or 'exit' :");
                exit = Console.ReadLine();

                int group;
                int.TryParse(exit, out group);

                var selectedGroup = allData.FindAll(oneUser => oneUser.Group == group);

                foreach (var oneUser in selectedGroup)
                {
                    Console.WriteLine(oneUser.ToString());

                }


            }

        }
    }



    class ExampleUser
    {
        public int Group
        {
            get;
            set;
        }
        public string Information
        {
            get;
            set;
        }

        public override string ToString()
        {
            return string.Format("{0}  {1}", Group, Information);
        }
    }
}
40K
15 мая 2012 года
D129
228 / / 18.04.2012
Теперь, если вам понадобится еще десяток свойств в данных, то вы просто добавляете их в класс, и в переопределенную функцию визуализации, все модули, которые этот класс используют - получают все без изменений.
Вы, наверное, учитесь, так не учитесь специально плохому.
:-)
70K
15 мая 2012 года
Silakoff
26 / / 04.05.2012
сделал, спасибо!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог