{ "w", "w", "z", "a", "c", "r", "f", "d", "e", "c", "g", "f", "m", "z" }
一个数组,我有所有“C”应为“F”之前移动的规则。 在遵守规则的前提下尽可能保持与原件最接近的顺序。 真实世界的例子是一个应用程序,它知道某个插件“A”应该比载入列表中的某个插件“B”更高。
所以,预期的结果将是:
首架F前移到C:
{ "w", "w", "z", "a", "c", "r", "c"<<, "f", "d", "e", "g", "f", "m", "z" }
或
F移动最C后:
{ "w", "w", "z", "a", "c", "r", "d", "e", "c", >>"f", "g", "f", "m", "z" }
是否有可能使用LINQ或任何准备好这样的目的?
我试过OrderBy(x => x == "c" ? 0 : x == "f" ? 1 : (int?)null)
,但它将元素移动到了最后。我想只对特定元素进行排序,但在可能的情况下保持其相对于其他元素的位置。
UPDATE
该解决方案应该对任何输入工作:
public static char GetLetter(Random rand)
{
string chars = "abcdefghijklmnopqrstuvwxyz";
int num = rand.Next(0, chars.Length - 1);
return chars[num];
}
public static IEnumerable<string> Sort(IEnumerable<string> enumerable, string first, string second)
{
???
}
static void Main(string[] args)
{
Random rand = new Random();
string[] input = Enumerable.Range(1, 10).Select(x => GetLetter(rand) + "").ToArray();
var result = Sort(Sort(input, "c", "f"), "m", "e");
}
支持多个元素( “M”, “C”, “F”)和多个规则是可取的,如果它不事情太复杂了。
是否可以使用'List'而不是?这允许你在指定的索引处插入/删除,这使得这更容易。它可以用数组完成,但比一行LINQ更难。 –
Equalsk
这是发生在内存中还是LINQ被转换成SQL? –
@RobLang在内存中 – Vlad