using System.Collections.Generic;
public static void Main()
var prioritizedJobs = new string[] { "Weapons", "Shields", "Life Support", "Engines" };
var jobPriorities = prioritizedJobs.Select((job, index) => new {job, index}).ToDictionary(elem => elem.job, elem => elem.index);
var availableTasks = new [] {
new { Name = "Calibrate Crystals", Job = "Engines" },
new { Name = "Pointed Stick", Job = "Weapons" },
new { Name = "Make Coffee", Job = "Life Support" },
new { Name = "Cetacean Ops", Job = "Science" },
new { Name = "Landing Party", Job = "Weapons" },
new { Name = "Shovel Coal", Job = "Engines" },
var orderedAvailableTasks = availableTasks.OrderBy(task => jobPriorities.ContainsKey(task.Job) ? jobPriorities[task.Job] : int.MaxValue);
Console.WriteLine(string.Join("\r\n", orderedAvailableTasks));