別の配列で定義された順序で文字列のコレクションを作成しようとしています。私は私のクライアントは、クライアントLINQ OrderBy help needed
{
[0][0] categoryX,
[0][1] value from Category X,
[1][0] something else,
[1][1] value for something else,
[2][0] category1,
[2][1] value from Category 1
}
から渡された
すなわち、キーと値を含む文字列配列を渡す私は
requiredOrderOfElements
{
[0] category1,
[1] categoryX,
[2] something else
}
を説明しましょう知っている混乱に聞こえます
私が欲しいのは、 "価値"キー
のd順私は
[0]value from Category 1
[1]value from Category X
[2]value for something else
何をしたい私は、[並べ替え/たIComparer見てきたと私は必要なものを実装するための明確な方法を見ることはできません。私の現在の解決策は、醜いネストされたforループです
よりエレガントな方法のアイデアをいただければ幸いです。
更新: - (ここで、彼らはしません)問題は、あなたが彼らのインデックスで順序付けされる文字列の配列を想定していることであるテスト
[TestFixture]
public class GL_Linq_Test
{
[Test]
public void CanOrderByAnotherArray()
{
var requiredOrder=new[]{"my","required","order"};
var passedFromClient = new[]
{
new[] {"required", "cat"},
new[] {"order", "dog"},
new[] {"my", "bird"}
};
var ordered = FunkyOrderer.Order(requiredOrder, passedFromClient);
Assert.That(ordered.First()[1],Is.EqualTo("bird"));
Assert.That(ordered.Skip(1).First()[1], Is.EqualTo("cat"));
Assert.That(ordered.Skip(2).First()[1], Is.EqualTo("dog"));
}
}
public static class FunkyOrderer
{
//returns order bird,dog,cat not bird,cat,dog
public static IEnumerable<string[]> Order(string[] requiredOrder, IEnumerable<string[]>passedFromClient)
{
return from o in requiredOrder
join f in passedFromClient on o equals f[0]
orderby o
select f;
}
}
@Gilly - これは理にかなった情報でもありません。いくつかのサンプルコードまたは各配列の実際の外観のレイアウトを投稿してください。 –
うーん、他に何を入れるべきかわからない!私は下にテストを投稿し、それがそれ以上に良いかどうかを確認します。 – Gilly