Добавить имена данных в виде столбцов

Это расширение для блестящего ответа BigJim .

В моем случае у меня был класс NodeBase со словарем Children, и мне нужен был способ в целом сделать O (1) поиск от детей. Я пытался вернуть частное поле слова в getter из Children, поэтому, очевидно, я хотел избежать дорогостоящего копирования / итерации. Поэтому я использовал код Bigjim, чтобы передать Dictionary в общий Dictionary:

// Abstract parent class
public abstract class NodeBase
{
    public abstract IDictionary Children { get; }
    ...
}

// Implementing child class
public class RealNode : NodeBase
{
    private Dictionary containedNodes;

    public override IDictionary Children
    {
        // Using a modification of Bigjim's code to cast the Dictionary:
        return new IDictionary().CastDictionary();
    }
    ...
}

. Это сработало хорошо. Тем не менее, я в конечном итоге столкнулся с несвязанными ограничениями и в итоге создал абстрактный метод FindChild() в базовом классе, который вместо этого выполнял бы поиск. Как оказалось, это устранило потребность в литом словаре в первую очередь. (Я смог заменить его простым IEnumerable для моих целей.)

Итак, вопрос, который вы можете задать (особенно если производительность - это проблема, запрещающая вам использовать .Cast<> или .ConvertAll<>), is:

«Нужно ли мне вообще использовать всю коллекцию, или я могу использовать абстрактный метод для хранения специальных знаний, необходимых для выполнения задачи, и тем самым избежать прямого доступа к коллекции?»

Иногда самое простое решение - лучшее.

0
задан fitzy_blarb 13 July 2018 в 15:06
поделиться

2 ответа

Проще всего было бы использовать dplyr::bind_rows

library(dplyr)
bind_rows(lst(df1,df2,df3),.id="newCol")
#   newCol X1 X2
# 1    df1  1  1
# 2    df1  1  1
# 3    df2  2  2
# 4    df2  2  2
# 5    df3  3  3
# 6    df3  3  3
0
ответ дан Moody_Mudskipper 17 August 2018 в 12:34
поделиться
0
ответ дан Carlos Eduardo Lagosta 17 August 2018 в 12:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: