Nesnelerin bir listesini içeren Foo
sınıfına sahibim: List<Bar>
. Her bir Bar
, sipariş edilebilecekleri bir süreye sahiptir (bir süreyi temsil eden TimeSpan
tipinde) ve Bar
, değişmez bir nesnedir - yani, algoritmanın çalışması boyunca süre değişmez. Şu anda, her bir Foo
için, eğer sipariş verildiyse (yani en kısa süre için Bar
), listede ilk olacak olan Bar
'u koruyorum. Böyle bir şey performans (hız) işlem buradaSıralama düzenini koruyan koleksiyon C#
public class Foo
{
public List<Bar> AllBars { get; set; }
public Bar FirstBar { get; set; }
public Foo (Bar bar)
{
FirstBar = bar;
AllBars = new List<Bar>() { bar };
}
public AddBar(Bar bar)
{
if(bar.Duration < FirstBar.Duration)
{
FirstBar = bar;
}
AllBars.Add(bar);
}
}
Bu sınıf Foo
bir algoritma kullanılır kritiktir. Hafıza önemli ama hız kadar değil. Her biri en fazla m s'ye sahip olan n s listesi bulunmaktadır. Bu sınıf bana bu noktaya kadar iyi hizmet etti. Şimdi kullanıcıya birkaç seçenek sunmak istiyorum, yani listedeki ilk birkaç Bar
s rasgele erişime ihtiyacım olacak.
Bu nedenle sırayla dizine göre erişebilmem için Bar
s numaramı saklamak istiyorum. Bar
sınıfımda, Bar
s süreleri karşılaştırıldığında karşılaştırmak için IComparable
uyguladı, ancak uygun bir veri türü seçerken takılıyorum. System.Collections.SortedList
'a baktım ama (yanılmadıkça) bu, IDictionary
'u uyguladığı şekilde, öğelere göre referans öğeleri olarak görünüyor. Nesneleri dizilenecek şekilde koruyacak ve dizin sırasına göre hareket edebilecek şekilde hangi koleksiyonu kullanabilirdim?
Normal bir 'List' 'Sort' yöntemini kullanarak sıralayamıyor musunuz? Bu, her ekleme işleminden sonra aramayı gerektirecektir, ancak bir dizi öğeyi eklemek üzere olduğunuzu biliyorsanız, sıralamayı da bastırmanızı sağlar. '' Listesini kendi uygulamanız ile ayırabildiniz, bu da sizin için dışarıdan gelen çağrıları sizin için bir IList 'kullanıyorsunuz. –
['SortedSet'] 'ı (https://msdn.microsoft.com/en-us/library/dd412070.aspx) deneyin, ancak kopyalara izin vermediğine dikkat edin. –
@AdamHouldsworth 'performans' ile devam ettiğini düşünmüyoruz –