Работа со списками List<> C#, очень надо!
Имеется метод, в котором есть List<int> id, List <string> list1, List<string> list2. Мне нужно добавлять/считывать элементы списков list1 и list2 по выбору элемента из id, причем одному значению id может соответствовать различное количество значений как list1 так и list2. Подскажите, как реализовать это соответствие? Спасибо
Возможно нужно создать список 2х списков? можно ли это и как с этим работать?
Возможно нужно создать структуру и уже из нее список?
Код:
List<KeyValuePair<int, string>> list = new List<KeyValuePair<int, string>>();
Цитата: Alm3n
С этими структурами данных - никак. В C# нет подходящего стандартного класса, нужно писать что-то своё, например
Код:
List<KeyValuePair<int, string>> list = new List<KeyValuePair<int, string>>();
Да была такая идея..но беда в том что KeyValuePair не катит, у list1 и list2 может быть различная длина.
Цитата: 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)
{}
}
{
foreach(list1)
{}
foreach(list2)
{}
}
MainList.Add(id1, list1.add(id2), list2.add(id3));
И так представлять себе вывод данных
MainList = id1,
id2.0, id3.0
id2.1 id3.1
id2.2 id3.2
Написано убого, знаю, но как то хочется приблизиться к ответу))
Тогда придётся писать свой класс.
Цитата: Silakoff
Да была такая идея..но беда в том что KeyValuePair не катит, у list1 и list2 может быть различная длина.
И? В чем проблема? Почему не катит?
Цитата: arrjj
[quote=Silakoff;82156]
Да была такая идея..но беда в том что KeyValuePair не катит, у list1 и list2 может быть различная длина.
Да была такая идея..но беда в том что KeyValuePair не катит, у list1 и list2 может быть различная длина.
И? В чем проблема? Почему не катит?[/quote]
Разве KeyValuePair не подразумевает, что key и value должны быть заполнены соответственно, а у меня key(i) может содержать value (i) = null.
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,ХУ)
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 из главного списка хранят различное кол-во значений.
И обьектами класса заполнять список.
Пусть будет много обькетов с одним и тем же ID и разными значениями других свойств (не будем вдаваться в подробности, что это уже не id, а скорее что-то типа Group или Category)
При этом можно перегрузить функцию этого класса ToString() и обеспечить вывод в нужном формате без проблем.
ок, пишу свой класс :)
Код:
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);
}
}
}
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);
}
}
}
Вы, наверное, учитесь, так не учитесь специально плохому.
:-)
сделал, спасибо!