Question: This is a general array question but, for my case, it is a list of strings.

Given: [a, b, c, d, e, f, g, h] and an item inside of the collection, say f.

Output: [f, g, h, a, b, c, d, e]

I can use substring methods or things like .take and .skip. But are there any cleaner alternatives like using linq or something else I might be unaware of?

edit: Okay, I apologize that I did not write question correctly. When I say LINQ, I meant something involving lambda expressions? Thanks for your comments. I will just stick with take and skip.

Answer: 
The `Take()` and `Skip()` methods are part of the LINQ. I do not see how you could rearrange the items inside the list via LINQ without using these methods.

```
List<string> list = new List<string>() { "a", "b", "c", "d", "e", "f", "g", "h", "i" };
string character = "f";
int i = list.IndexOf(character);

if (i != -1)
{
  list = list.Skip(i).Concat(list.Take(i)).ToList();
}

```

You could also use `List` specific methods like below

```
List<string> list = new List<string>() { "a", "b", "c", "d", "e", "f", "g", "h", "i" };
string character = "f";
int i = list.IndexOf(character);

if (i != -1)
{
   var sublist = list.GetRange(i, list.Count - i);
   list.RemoveRange(i, list.Count - i);
   list.InsertRange(0, sublist);
}

```
another possibility

```
var newlist = new List<string>(oldList.Count);
newList.Add("f");
newList.AddRange(oldList.Where(x=>x!="f"));

```

less efficeint since it keeps looking at the elements even after its found the target one, but the code is simple