2011-12-27 4 views
2

У меня есть эти данные:Как создать многотипную матрицу?

4 pippo pluto paperino 
10 marco paolo roberto 
2 hello cruel world 

, и я хотел бы сохранить эти данные в многопрофильной матрицы myMatrix а. (Первое поле представляет собой целое число, остальные - строки).

Итак, если я нахожу myMatrix [1] [2], я должен получить paolo. Как я могу это сделать на C#?

ответ

2

Самый лучший способ создать класс, которые представляют данные, с 4-мя полями (число, строка, строка, строка).

public class MyClass 
{ 
    public int Param1 { get; set; } 
    public string Param2 { get; set; } 
    public string Param3 { get; set; } 
    public string Param4 { get; set; } 
} 

Затем просто используйте List<MyClass> для хранения ваших данных. Чтобы получить Паоло, вам нужно будет использовать List[1].Param2 (также назовите свои параметры с содержательными именами).

4

Вы не можете использовать массивы для хранения различных типов объектов, которые не являются частью одной и той же цепи наследования.

a object[][] будет работать, но у вас не будет безопасности типа и необходимости приведения к типу цели.

Вы можете использовать Tuple<int,string,string,string>[] (представленный в .NET 4.0), хотя ваш простой тип будет более читаемым.

Вместо использования массивов вы можете использовать один из типов коллекций - например, List<T>, где общий тип - это кортеж или ваш собственный тип.

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

+0

+1 для кортежей Я не знаю, почему люди не принимая его, это гораздо меньше кода, и это фабрика картины в лучшем виде. –

+0

@SurjitSamra - Люди либо не знают этого, либо не хотят использовать его, поскольку он имеет очень слабую семантику. Лично я бы использовал его только в одном методе, а не как часть API. – Oded

2

Вы можете использовать Dictionary<int, string[]>, чтобы получить такой эффект:

Dictionary<int, string[]> myMatrix = new Dictionary<int, string[]>(); 
myMatrix.Add(4, new[] { "pippo", "pluto", "paperino" }); 
... 


//get 

myMatrix[4][1] == "pluto" 
4
Tuple<int, string, string, string>[] 
object[][] 
Dictionary<int, string[]> 
2

Dictionary<int, string[]> - самый простой способ, как я думаю.

Подробнее о Dictionary типа можно найти here

Смежные вопросы