私はは、他の人の後に特定の要素を移動ではなく、上部にまたは下部
{ "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" }
または
最後のCの後にfを移動:
{ "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")と複数のルールをサポートすることがdoesnの場合に望ましいです物事が複雑すぎる。
代わりに 'List'を使用することはできますか?これにより、指定したインデックスに挿入/削除することが可能になります。これは、配列で行うことはできますが、1行のLINQよりも困難です。 –
Equalsk
これはメモリ内に発生しているのですか、またはLINQがSQLに変換されていますか? –
メモリ内の@RobLang – Vlad