Объединить несколько массивов в один массив (Linq) - PullRequest
9 голосов
/ 23 апреля 2009

У меня проблемы с объединением нескольких массивов в один "большой массив", я думаю, что это возможно в Linq, но я не могу разобраться с этим: (

рассмотрим некоторый метод, который возвращает массив некоторых объектов dummyObjects

public class DummyObjectReceiver 
{
  public DummyObject[] GetDummyObjects  { -snip- }
}

сейчас где-то у меня есть это:

public class Temp
{
  public List<DummyObjectReceiver> { get; set; }

  public DummyObject[] GetAllDummyObjects ()
  {
    //here's where I'm struggling (in linq) - no problem doing it using foreach'es... ;)
  }
}

Надеюсь, мне ясно, чего я добиваюсь (в качестве дополнительного я хочу упорядочить этот массив по значению типа int, которое имеет DummyObject ... - но порядок не должен быть проблемой, ... я надеюсь;)

1 Ответ

15 голосов
/ 23 апреля 2009

Вы используете метод SelectMany для сглаживания списка массивов, возвращающих объекты в массив.

public class DummyObject {
    public string Name;
    public int Value;
}

public class DummyObjectReceiver  {

    public DummyObject[] GetDummyObjects()  {
        return new DummyObject[] {
            new DummyObject() { Name = "a", Value = 1 },
            new DummyObject() { Name = "b", Value = 2 }
        };
    }

}

public class Temp {

    public List<DummyObjectReceiver> Receivers { get; set; }

    public DummyObject[] GetAllDummyObjects() {
        return Receivers.SelectMany(r => r.GetDummyObjects()).OrderBy(d => d.Value).ToArray();
    }

}

Пример:

Temp temp = new Temp();
temp.Receivers = new List<DummyObjectReceiver>();
temp.Receivers.Add(new DummyObjectReceiver());
temp.Receivers.Add(new DummyObjectReceiver());
temp.Receivers.Add(new DummyObjectReceiver());

DummyObject[] result = temp.GetAllDummyObjects();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...