I have a sorted list which I want to stagger the output of for another part of my project but can't figure it out the output should look like:
Here is what I have so far (This was made with https://dotnetfiddle.net/) for testing
public static void Main()
{
List<ColumnArrangment> listVersion = new List<ColumnArrangment>();
listVersion.Add(new ColumnArrangment { Name ="Questions", Priority = 2, Amount = 2});
listVersion.Add(new ColumnArrangment { Name ="Parts", Priority = 1, Amount = 2});
listVersion.Add(new ColumnArrangment { Name ="CodeLetters", Priority = 4, Amount = 2});
listVersion.Add(new ColumnArrangment { Name ="Answers", Priority = 3, Amount = 2});
// Order
List<ColumnArrangment> SortedList = listVersion.OrderBy(o=>o.Priority).ToList();
foreach(var obj in SortedList.ToList())
{
int sortedIndex = SortedList.FindIndex(i => i.Name.Equals(obj.Name));
for(var a = SortedList.ElementAt(sortedIndex).Amount; a > 0; a--)
{
if(SortedList.ElementAt(sortedIndex).Amount > 0) {
SortedList.ElementAt(sortedIndex).Amount -= 1;
Console.WriteLine(obj.Name);
}
}
}
}
public class ColumnArrangment
{
public string Name { get; set; }
public int Priority { get; set; }
public int Amount { get; set; }
public ColumnArrangment()
{ }
public ColumnArrangment(ColumnArrangment ca)
{
Name = ca.Name;
Priority = ca.Priority;
Amount = ca.Amount;
}
}
The help is appreciated thanks!
When the list is already ordered by priority you can simply print the item and reduce its Amount as long as there are any ColumnArrangement that have Amount.
static void Main(string[] args)
{
List<ColumnArrangement> listVersion = new List<ColumnArrangement>();
listVersion.Add(new ColumnArrangement { Name = "Questions", Priority = 2, Amount = 2 });
listVersion.Add(new ColumnArrangement { Name = "Parts", Priority = 1, Amount = 2 });
listVersion.Add(new ColumnArrangement { Name = "CodeLetters", Priority = 4, Amount = 2 });
listVersion.Add(new ColumnArrangement { Name = "Answers", Priority = 3, Amount = 2 });
listVersion.Add(new ColumnArrangement { Name = "Test", Priority = 5, Amount = 4 });
listVersion = listVersion.OrderBy(x => x.Priority).ToList();
while (listVersion.Any(x => x.Amount > 0))
{
foreach (var item in listVersion)
{
if (item.Amount > 0)
{
Console.WriteLine(item.Name);
item.Amount--;
}
}
}
}
prints:
Parts
Questions
Answers
CodeLetters
Test
Parts
Questions
Answers
CodeLetters
Test
Test
Test