Jest to lista wartości binarnych: zainfekowaniu przekazywania wartości do sąsiednich elementów listy w języku C#
List<bool> myList = new List<bool>(){true, true, false, false, true, false, false, false, true, true, true, false, false};
mój algorytm dąży do konwersji dowolnego fałszywą pozycję na true, jeśli są one w sąsiedztwie prawdziwa wartość:
result = {true, true, true, true, true, true, false, true, true, true, true, true, false}
Moje rozwiązanie działa, jak widać. Można to zrobić za pomocą dwóch różnych pętli, a następnie zip dwie listy:
List<bool> firstList = new List<bool>();
List<bool> secondList = new List<bool>();
for(int i=0; i<myList.Count()-1; i++){
if(myList[i]==true){
firstList[i]=true;
firstList[i+1]=true;
}
}
for(int i=1; i<myList.Count(); i++){
if(myList[i]==true){
secondList[i]=true;
secondList[i-1]=true;
}
}
List<bool> finalList = firstList.Zip(secondList, (a,b)=>a||b).ToList();
Jednak nie wydaje się być najlepszym rozwiązaniem, ponieważ problem wygląda bardzo proste. Jakiś pomysł na zrobienie tego za pomocą jednej pętli lub najlepiej używając linq?
dlaczego nie używać agregacji? –