LINQ命令"循环"

Eri*_*ric 6 linq round-robin

看起来这应该是一个简单的任务,但我无法弄清楚如何使用LINQ.到目前为止我能找到的唯一信息是循环赛锦标赛格式,这不是我想要的.我可能错了.鉴于以下列表:

var items [] { "apple", "banana", "banana", "candy", "banana", "fruit", "apple" };
Run Code Online (Sandbox Code Playgroud)

我如何对此进行排序(最好使用linq),使其以"循环"顺序排出,即在重复之前选择每个唯一项目一次.所以上面的列表会像这样出现(如果它按字母顺序出现并不重要,即使这个列表也是如此):

var sorted [] { "apple", "banana", "candy", "fruit", "apple", "banana", "banana" };
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过艰难的方式迭代它来做到这一点,我只是希望更容易.有没有人有任何见解如何做到这一点?提前致谢!

Lee*_*Lee 8

var sorted = items.GroupBy(s => s)
    .SelectMany(grp => grp.Select((str, idx) => new { Index = idx, Value = str }))
    .OrderBy(v => v.Index).ThenBy(v => v.Value)
    .Select(v => v.Value)
    .ToArray();
Run Code Online (Sandbox Code Playgroud)