Arraydan lug'atni qanday yaratish kerak

OK, bu ro'yxat mavjud:

object[] test;
test[0]=null;
....
test[8700]=null;
test[8701]= object[]
....
test[9431]= object[]

ob'ekt [] - rost/false/null qiymati bo'lgan boshqa ro'yxat

men bu qatyokini null bo'lmagan qiymatlarni o'z ichiga olgan ro'yxatga yozmoqchiman:

Dictionary dic = new Dictionary;

yoki

list sectyokis= new list()

where sectyoki looks like this

Sectyoki{(int)id,(List)products}
Product{(int)id}    

Buning eng yaxshi/eng aqlli yo'li qanday bo'ladi?

Oldindan rahmat

3
Agar bu savol "Agar Arraydan lug'atni qanday yaratish kerak" bo'lsa, u faqatgina null bo'lmagan qiymatlarni tanlash oson, lekin tegishli indeksni olish qiyin " qayta qo'ng'iroq qilmasdan. Lug'atlarni yaratish uchun LINQ bo'lmagan kodli kodni ishlatish eng to'g'ri va tez o'qiladigan va tezkor usul.
qo'shib qo'ydi muallif Tim Schmelter, manba
ob'ektingizda nima bor [] ? Men uni qabul qilaman test - ob'ektlar qatori o'zi?
qo'shib qo'ydi muallif Adam Houldsworth, manba
Sizning ob'ekt testi qanday qilib boshlang'ich?
qo'shib qo'ydi muallif Andy Rose, manba
@AdamHouldsworth Men yordam beradigan savolni tahrir qildim
qo'shib qo'ydi muallif Kimtho6, manba
@MamtaDalal echimlari buzilmaydi, chunki echimlar ishlamaydi
qo'shib qo'ydi muallif Kimtho6, manba
qo'shib qo'ydi muallif Mamta D, manba

2 javoblar

Ob'ektning katalogini ta'minlovchi Select() ortiqcha yukini ishlating:

test.Select((t,i) => new Sector { id = i, products = t })
.Where(s => s.products != null).ToList();

yoki lug'atni olish uchun:

test.Select((t,i) => new Sector { id = i, products = t })
.Where(s => s.products != null).ToDictionary(s => s.id, s => s.products);
3
qo'shib qo'ydi
Dictionary keyed = test
    .Select((obj, index) => Tuple.Create(obj, index))
    .Where(x => x.Item1 != null)
    .ToDictionary(x => x.Item2, x => x.Item1);

Kichik nota bo'lsa-da - qator tezroq bo'ladi, agar p qator ham bo'lmasa, kamroq bo'lsa, siz shunchaki tekkizishingiz mumkin.

1
qo'shib qo'ydi