J'essaie de créer une collection de chaînes dans un ordre défini par un autre tableau. Ça a l'air confus Je sais alors laissez-moi vous expliquerLINQ OrderBy help
requiredOrderOfElements
{
[0] category1,
[1] categoryX,
[2] something else
}
mon client passe un tableau de chaînes contenant la clé et la valeur-à-dire
passé du client
{
[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
}
ce que je veux, c'est la "valeur" des textes dans le besoin d 'ordre des clés
ce que je veux
[0]value from Category 1
[1]value from Category X
[2]value for something else
Je l'ai regardé OrderBy/IComparer et ne peut pas voir une façon évidente de mettre en œuvre ce que je dois. Ma solution actuelle est une boucle forcée imbécile
Des idées pour une manière plus élégante seraient appréciées.
Mise à jour: - est ici le test
[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 - Ce n'est pas assez d'informations pour commencer à avoir un sens. S'il vous plaît poster un exemple de code ou une mise en page de la façon dont chaque tableau ressemble réellement. –
Hmmmm, je ne sais pas quoi d'autre à mettre! Je vais poster un test ci-dessous et voir si cela explique mieux – Gilly