我有很多东西

MyObjects[] mos = GetMyObjectsArray();

现在我想把一些id为1085的元素移到first,所以我在linq中编写了这样的代码,有没有更优雅的方法?
mos.Where(c => c.ID == 1085).Take(1).Concat(mos.Where(c => c.ID != 1085)).ToArray();

注意,我想保存其他项的位置,因此使用第一项进行填充不是一个解决方案

最佳答案

这不是linq,而是我对数组的处理方式。

public static bool MoveToFront<T>(this T[] mos, Predicate<T> match)
  {
    if (mos.Length == 0)
    {
      return false;
    }
    var idx = Array.FindIndex(mos, match);
    if (idx == -1)
    {
      return false;
    }
    var tmp = mos[idx];
    Array.Copy(mos, 0, mos, 1, idx);
    mos[0] = tmp;
    return true;
  }

用途:
MyObject[] mos = GetArray();
mos.MoveToFront(c => c.ID == 1085);

09-30 19:27