İki listemiz var, diyelim ki öğrenciler ve puanları. Bu iki listeyi karşılaştırmak ve yeni liste ile eski liste arasındaki deltayı bulmak, daha sonra yeni listeye Ekle veya Güncelle'ye ilişkin en az müdahaleci yolu bulmak. Bu yaklaşım için en iyi algoritma nedir? Yeni listeye ve performansa minimum düzeyde değişiklik yapmak istiyorum.İki listeyi karşılaştırmak ve bu iki liste arasındaki deltayı bulmak için en etkili model/algoritma hangisidir?
örnek kod:
List<ListItem> existingList = new List<ListItem>();
List<ListItem> newList = new List<ListItem>();
public TopLists()
{
InitTwoLists();
}
private void InitTwoLists()
{
existingList.Add(new ListItem { Name = "Shane", Score = 100 });
existingList.Add(new ListItem { Name = "Mark", Score = 95 });
existingList.Add(new ListItem { Name = "Shane", Score = 94 });
existingList.Add(new ListItem { Name = "Steve", Score = 90 });
existingList.Add(new ListItem { Name = "Brian", Score = 85 });
existingList.Add(new ListItem { Name = "Craig", Score = 85 });
existingList.Add(new ListItem { Name = "John", Score = 82 });
existingList.Add(new ListItem { Name = "Steve", Score = 81 });
existingList.Add(new ListItem { Name = "Philip", Score = 79 });
existingList.Add(new ListItem { Name = "Peter", Score = 70 });
newList.Add(new ListItem { Name = "Shane", Score = 100 });
newList.Add(new ListItem { Name = "Steve", Score = 96 }); // This is change
newList.Add(new ListItem { Name = "Mark", Score = 95 });
newList.Add(new ListItem { Name = "Shane", Score = 94 });
newList.Add(new ListItem { Name = "Brian", Score = 85 });
newList.Add(new ListItem { Name = "Craig", Score = 85 });
newList.Add(new ListItem { Name = "John", Score = 82 });
newList.Add(new ListItem { Name = "Steve", Score = 81 });
newList.Add(new ListItem { Name = "Philip", Score = 79 });
newList.Add(new ListItem { Name = "Peter", Score = 70 });
}
}
public void CompareLists()
{
// How would I find the deltas and update the new list with any changes from old?
}
}
public class ListItem
{
public string Name { get; set; }
public int Score { get; set; }
}
** DÜZENLEME: İstenen çıkış ***
istenen çıkış aslında delta ile newlist değiştirmektir. bu senaryoda Örneğin:
newList.Add(new ListItem { Name = "Shane", Score = 100 });
newList.Add(new ListItem { Name = "Steve", Score = 96 }); // This is change
newList.Add(new ListItem { Name = "Mark", Score = 95 });
newList.Add(new ListItem { Name = "Shane", Score = 94 });
newList.Add(new ListItem { Name = "Brian", Score = 85 });
newList.Add(new ListItem { Name = "Craig", Score = 85 });
newList.Add(new ListItem { Name = "John", Score = 82 });
newList.Add(new ListItem { Name = "Steve", Score = 81 });
newList.Add(new ListItem { Name = "Roger", Score = 80 }); // Roger is a new entry
newList.Add(new ListItem { Name = "Phillip", Score = 79 }); // Philip moved down one
// Peter Ben sadece ilk 10
istiyorum çünkü Yani değişiklikler olacağını, 70 onun puanıyla bu listeyi devre dışı bırakır:
Güncelleme rekor 2 "Steve" için puanı Linq kullanabilir miyim kapalı üst 10.
genel bir çözüm mü arıyorsunuz? Veya listelerin belirli bir sıralama düzeni gibi belirli kısıtlamalar var mı? –
Listelerin büyüklükte aynı olacağını varsayalım mı? Ayrıca A listesinde yer alan ve B listesinde olmayan ve tersini de bulmak ister misiniz? –
genel çözüm. Listeler her zaman eşit olur. Sıralama düzeni, her zaman azalan puanın bir türüdür. – Shane