DAWorkbench 0.0.1
DAWorkbench API
载入中...
搜索中...
未找到
da_data_table.hpp
1#ifndef DA_DATA_TABLE_H
2#define DA_DATA_TABLE_H
3// Qt
4#include <QVector>
5#include <QHash>
6#include <QDebug>
7// std
8#include <memory>
9// DA
10#include "da_algorithm.hpp"
11namespace DA
12{
13
17template< typename T >
18class DAVector : public QVector< T >
19{
20public:
21 DAVector() : QVector< T >()
22 {
23 }
24
25 DAVector(int size) : QVector< T >(size)
26 {
27 }
28
29 DAVector(int size, const T& t) : QVector< T >(size, t)
30 {
31 }
32
33 DAVector(std::initializer_list< T > args) : QVector< T >(args)
34 {
35 }
36
37 DAVector(const QString& n) : QVector< T >(), mName(n)
38 {
39 }
40 //名字的引用
41 const QString& name() const;
42 QString& name();
43 //名字的操作
44 void setName(const QString& n);
45 QString getName() const;
46
47private:
48 QString mName;
49};
50
51template< typename T >
52const QString& DAVector< T >::name() const
53{
54 return (mName);
55}
56
57template< typename T >
58QString& DAVector< T >::name()
59{
60 return (mName);
61}
62
63template< typename T >
64void DAVector< T >::setName(const QString& n)
65{
66 mName = n;
67}
68
69template< typename T >
70QString DAVector< T >::getName() const
71{
72 return (mName);
73}
74
110template< typename T >
112{
113public:
124 typedef T Type;
125 typedef DAVector< T > SeriesType;
126 typedef std::shared_ptr< SeriesType > SeriesPtr;
127 typedef typename DAVector< T >::iterator SeriesIterator;
128 typedef typename DAVector< T >::const_iterator SeriesConstIterator;
129 typedef DADataTable< T > TableType;
130 typedef std::shared_ptr< TableType > TablePtr;
131 static SeriesPtr makeSeries();
132 static SeriesPtr makeSeries(const QString& n);
133 static SeriesPtr makeSeries(std::initializer_list< T > args);
134 static TablePtr makeTable();
135
136 DADataTable();
137 DADataTable(int rows, int cols);
138 void resize(int r, int c);
139
140 //判断是否存在field
141 bool haveColumns(const QString& field) const;
142
147 void fill(const T& v);
148 const T& at(int r, int c) const;
149 T& at(int r, int c);
150 const T& iloc(int r, int c) const;
151 T& iloc(int r, int c);
152
153 T cell(int r, int c) const;
154
155 void appendSeries(SeriesPtr ser);
156 void appendSeries(std::initializer_list< T > args, const QString& n);
157
158 template< typename Ite1, typename Ite2 >
159 void appendRow(Ite1 b, Ite2 e);
160 void appendRow(std::initializer_list< T > args);
161 //名字搜索引
162 int nameToIndex(const QString& n) const;
163 SeriesPtr& series(int c);
164 const SeriesPtr& series(int c) const;
165 SeriesPtr& series(const QString& n);
166 const SeriesPtr& series(const QString& n) const;
167
168 //返回一列数据,返回一个SeriesPtr,这个seriesPtr的写操作不会影响table
169 SeriesPtr row(int r) const;
170
171 SeriesType& operator[](int c);
172 const SeriesType& operator[](int c) const;
173 SeriesType& operator[](const QString& rowname);
174 const SeriesType& operator[](const QString& rowname) const;
175
176 void reserve(int size);
177
181 void fixSize();
182
187 int columnCount() const;
188
193 int rowCount() const;
194
199 void setMode(Mode m);
200
205 Mode getMode() const;
206
210 void clear();
211
212 void setName(const QString& n);
213 QString getName() const;
214
219 QStringList columns() const;
220 QStringList columnNames() const;
221
226 void setSeriesNames(const QStringList& ns);
227
235 TablePtr takeByValue(const QString& field, T value) const;
236
243 QPair< QList< TablePtr >, QList< T > > groupBy(const QString& field) const;
244
249 void orderBy(const QString& sn);
250 void orderBy(int cindex);
251
258 QPair< T, int > lowerBound(const T& v, const QString& sortedfield) const;
259 QPair< T, int > lowerBound(const T& v, int c) const;
260 QPair< T, int > upperBound(const T& v, const QString& sortedfield) const;
261 QPair< T, int > upperBound(const T& v, int c) const;
262
268
273 bool isCaseSensitivity() const;
274
275private:
277 size_t m_rows;
278 Mode m_mode;
279 SeriesPtr m_nullseries;
280 CaseSensitivity m_caseSensitivity;
281};
282
283template< typename T >
284typename DADataTable< T >::TablePtr take_by_value(const DADataTable< T >& table, const QString& field, T value)
285{
286 const int c = table.nameToIndex(field);
287
288 typename DADataTable< T >::TablePtr res = DADataTable< T >::makeTable();
289
290 res->setName(table.getName());
291 res->setSeriesNames(table.columns());
292 int rsize = table.rowCount();
293
294 for (int i = 0; i < rsize; ++i) {
295 if (table.iloc(i, c) == value) {
296 typename DADataTable< T >::SeriesPtr rv = table.row(i);
297 res->appendDatas(rv->begin(), rv->end());
298 }
299 }
300 return (res);
301}
302
310template< typename T >
311typename DADataTable< T >::TablePtr take_by_value(const DADataTable< T >& table, int c, T value)
312{
313 typename DADataTable< T >::TablePtr res = DADataTable< T >::makeTable();
314
315 res->setName(table.getName());
316 // setSeriesNames对于不存在的列会扩充
317 res->setSeriesNames(table.columns());
318 //逐行遍历
319 int rsize = table.rowCount();
320
321 for (int i = 0; i < rsize; ++i) {
322 if (table.iloc(i, c) == value) {
323 typename DADataTable< T >::SeriesPtr rv = table.row(i);
324 res->appendDatas(rv->begin(), rv->end());
325 }
326 }
327 return (res);
328}
329
336template< typename T >
337QPair< QList< typename DADataTable< T >::TablePtr >, QList< T > > group_by(const DADataTable< T >& table, const QString& field)
338{
339 QList< typename DADataTable< T >::TablePtr > restables;
340 QList< T > gr;
341
342 int cindex = table.nameToIndex(field);
343
344 Q_ASSERT_X(cindex >= 0, "groupby", "unknow field");
345 typename DADataTable< T >::SeriesPtr r = table.series(cindex);
346 if (r == nullptr) {
347 return (qMakePair(restables, gr));
348 }
349 gr = r->toList().toSet().toList();
350 std::sort(gr.begin(), gr.end());
351 for (T v : gr) {
352 restables.append(take_by_value(table, cindex, v));
353 }
354 return (qMakePair(restables, gr));
355}
356
360template< typename T >
362{
363public:
364 _DAValueWithIndex() : index(-1)
365 {
366 }
367
368 _DAValueWithIndex(const T& v, int i) : value(v), index(i)
369 {
370 }
371
372 T value;
373 int index;
374};
375
376template< typename T >
377bool operator<(const _DAValueWithIndex< T >& a, const _DAValueWithIndex< T >& b)
378{
379 return (a.value < b.value);
380}
381
387template< typename T >
388std::shared_ptr< DAVector< _DAValueWithIndex< T > > > makeIndexSeries(const typename DADataTable< T >::SeriesPtr& p)
389{
390 std::shared_ptr< DAVector< _DAValueWithIndex< T > > > res = std::make_shared< DAVector< _DAValueWithIndex< T > > >();
391
392 res->setName(p->getName());
393 const int s = p->size();
394
395 res->reserve(s);
396 for (int i = 0; i < s; ++i) {
397 res->push_back(_DAValueWithIndex< T >(p->at(i), i));
398 }
399 return (res);
400}
401
402template< typename T >
403void order_by(DADataTable< T >& table, const QString& field)
404{
405 const int r = table.nameToIndex(field);
406 if (r < 0) {
407 return;
408 }
409 order_by(table, r);
410}
411
412template< typename T >
413void order_by(DADataTable< T >& table, int c)
414{
415 typename DADataTable< T >::SeriesPtr ser = table.series(c);
416 Q_ASSERT_X(ser != nullptr, "orderBy", "unknow field");
417 auto ordser = makeIndexSeries< T >(ser);
418
419 std::sort(ordser->begin(), ordser->end());
420 int sercount = table.columnCount();
421
422 //开始逐一转换
423 for (int i = 0; i < sercount; ++i) {
424 typename DADataTable< T >::SeriesPtr series = table.series(i);
425 typename DADataTable< T >::SeriesPtr ns = DADataTable< T >::makeSeries(series->getName());
426 ns->reserve(series->size());
427 for (auto j = ordser->begin(); j != ordser->end(); ++j) {
428 ns->push_back(series->at((*j).index));
429 }
430 table.series(i).swap(ns);
431 }
432}
433
437template< typename T >
438DADataTable< T >::DADataTable() : m_rows(0), m_mode(ExpandMode), m_caseSensitivity(CaseInsensitive)
439{
440}
441
447template< typename T >
448DADataTable< T >::DADataTable(int rows, int cols) : m_mode(ExpandMode), m_caseSensitivity(CaseInsensitive)
449{
450 m_d.clear();
451 m_d.reserve(cols);
452 for (int i = 0; i < cols; ++i) {
453 SeriesPtr r = makeSeries(rows);
454 r->setName(QString("column_%1").arg(i));
455 appendSeries(r);
456 }
457}
458
464template< typename T >
465void DADataTable< T >::resize(int r, int c)
466{
467 m_d.resize(c);
468 for (SeriesPtr& ser : m_d) {
469 if (ser == nullptr) {
470 ser = makeSeries();
471 }
472 ser->resize(r);
473 }
474 m_rows = r;
475}
476
482template< typename T >
483bool DADataTable< T >::haveColumns(const QString& field) const
484{
485 int c = columnCount();
486 Qt::CaseSensitivity cs = isCaseSensitivity() ? Qt::CaseSensitive : Qt::CaseInsensitive;
487
488 for (int i = 0; i < c; ++i) {
489 if (series(i)->name().compare(field, cs) == 0) {
490 return (true);
491 }
492 }
493 return (false);
494}
495
500template< typename T >
502{
503 for (SeriesPtr s : m_d) {
504 s->fill(v);
505 }
506}
507
514template< typename T >
515const T& DADataTable< T >::at(int r, int c) const
516{
517 return (m_d.at(c)->at(r));
518}
519
526template< typename T >
527T& DADataTable< T >::at(int r, int c)
528{
529 return (*(m_d[ c ])[ r ]);
530}
531
538template< typename T >
539const T& DADataTable< T >::iloc(int r, int c) const
540{
541 return at(r, c);
542}
543
550template< typename T >
552{
553 return at(r, c);
554}
555
562template< typename T >
563T DADataTable< T >::cell(int r, int c) const
564{
565 if (r < m_d.size()) {
566 const SeriesPtr& s = series(c);
567 if (r < s->size()) {
568 return (s->at(r));
569 }
570 }
571 return (T());
572}
573
578template< typename T >
580{
581 size_t s = ser->size();
582
583 if (0 == m_rows) {
584 //如果是空表,空表不对mode做判断
585 resize(s, columnCount());
586 m_d.push_back(ser);
587 m_rows = s;
588 } else if (s == m_rows) {
589 //如果插入的列的行数和表行数一致,直接插入
590 m_d.push_back(ser);
591 } else if (s < m_rows) {
592 //如果插入的列的行数比表行数少,先在结尾补充
593 ser->resize(m_rows);
594 m_d.push_back(ser);
595 } else {
596 // 如果插入的函数s>m_rows
597 if (getMode() == ExpandMode) {
598 for (SeriesPtr colser : m_d) {
599 colser->resize(s);
600 }
601 m_d.push_back(ser);
602 m_rows = s;
603 } else {
604 //固定模式则把ser截断插入
605 ser->resize(m_rows);
606 m_d.push_back(ser);
607 }
608 }
609}
610
611template< typename T >
612void DADataTable< T >::appendSeries(std::initializer_list< T > args, const QString& n)
613{
614 SeriesPtr r = makeSeries(args);
615
616 r->setName(n);
617 appendSeries(r);
618}
619
620template< typename T >
621template< typename Ite1, typename Ite2 >
622void DADataTable< T >::appendRow(Ite1 b, Ite2 e)
623{
624 const int rc = columnCount();
625 auto it = b;
626
627 for (int i = 0; i < rc; ++i) {
628 it = b + i;
629 if (it < e) {
630 series(i)->push_back(*it);
631 } else {
632 series(i)->push_back(T());
633 }
634 }
635 ++m_rows;
636}
637
638template< typename T >
639void DADataTable< T >::appendRow(std::initializer_list< T > args)
640{
641 appendRow(args.begin(), args.end());
642 // const int rc = columnCount();
643 // for (int i = 0; i < rc; ++i) {
644 // if (i < args.size()) {
645 // series(i)->push_back(args[ i ]);
646 // } else {
647 // series(i)->push_back(T());
648 // }
649 // }
650 // ++m_rows;
651}
652
653template< typename T >
654typename DADataTable< T >::SeriesPtr DADataTable< T >::makeSeries(const QString& n)
655{
656 return (std::make_shared< SeriesType >(n));
657}
658
659template< typename T >
660typename DADataTable< T >::SeriesPtr DADataTable< T >::makeSeries(std::initializer_list< T > args)
661{
662 return (std::make_shared< SeriesType >(args));
663}
664
665template< typename T >
666typename DADataTable< T >::TablePtr DADataTable< T >::makeTable()
667{
668 return (std::make_shared< typename DADataTable< T >::TableType >());
669}
670
671template< typename T >
672typename DADataTable< T >::SeriesPtr DADataTable< T >::makeSeries()
673{
674 return (std::make_shared< SeriesType >());
675}
676
677template< typename T >
678int DADataTable< T >::nameToIndex(const QString& n) const
679{
680 int r = columnCount();
681 Qt::CaseSensitivity cs = isCaseSensitivity() ? Qt::CaseSensitive : Qt::CaseInsensitive;
682
683 for (int i = 0; i < r; ++i) {
684 if (series(i)->name().compare(n, cs) == 0) {
685 return (i);
686 }
687 }
688 return (-1);
689}
690
696template< typename T >
697typename DADataTable< T >::SeriesPtr& DADataTable< T >::series(int c)
698{
699 return (m_d[ c ]);
700}
701
707template< typename T >
708const typename DADataTable< T >::SeriesPtr& DADataTable< T >::series(int c) const
709{
710 return (m_d[ c ]);
711}
712
718template< typename T >
719typename DADataTable< T >::SeriesPtr& DADataTable< T >::series(const QString& n)
720{
721 int r = nameToIndex(n);
722
723 if ((r < 0) || (r > columnCount())) {
724 return (m_nullseries);
725 }
726 return (series(r));
727}
728
734template< typename T >
735const typename DADataTable< T >::SeriesPtr& DADataTable< T >::series(const QString& n) const
736{
737 int i = nameToIndex(n);
738
739 if ((i < 0) || (i > columnCount())) {
740 return (m_nullseries);
741 }
742 return (series(i));
743}
744
750template< typename T >
751typename DADataTable< T >::SeriesPtr DADataTable< T >::row(int r) const
752{
753 int csize = columnCount();
754 SeriesPtr sr = std::make_shared< SeriesType >(csize);
755
756 for (int c = 0; c < csize; ++c) {
757 (*sr)[ r ] = cell(r, c);
758 }
759 return (sr);
760}
761
762template< typename T >
763typename DADataTable< T >::SeriesType& DADataTable< T >::operator[](int c)
764{
765 return (*(series(r)));
766}
767
768template< typename T >
769const typename DADataTable< T >::SeriesType& DADataTable< T >::operator[](int c) const
770{
771 return (*(series(r)));
772}
773
774template< typename T >
775typename DADataTable< T >::SeriesType& DADataTable< T >::operator[](const QString& rowname)
776{
777 return (*(series(rowname)));
778}
779
780template< typename T >
781const typename DADataTable< T >::SeriesType& DADataTable< T >::operator[](const QString& rowname) const
782{
783 return (*(series(rowname)));
784}
785
786template< typename T >
787void DADataTable< T >::reserve(int size)
788{
789 for (SeriesPtr& p : m_d) {
790 p->reserve(size);
791 }
792}
793
799template< typename T >
801{
802 std::vector< int > ss;
803 ss.reserve(m_d.size());
804
805 for (const SeriesPtr& r : m_d) {
806 ss.push_back(r->size());
807 }
808 int maxsize = *(std::max_element(ss.begin(), ss.end()));
809
810 for (SeriesPtr& r : m_d) {
811 if (r->size() < maxsize) {
812 r->resize(maxsize);
813 }
814 }
815 m_rows = maxsize;
816}
817
822template< typename T >
824{
825 return (m_d.size());
826}
827
832template< typename T >
834{
835 return (m_rows);
836}
837
838template< typename T >
840{
841 m_mode = m;
842}
843
844template< typename T >
846{
847 return (m_mode);
848}
849
850template< typename T >
852{
853 m_d.clear();
854 m_rows = 0;
855}
856
861template< typename T >
862void DADataTable< T >::setName(const QString& n)
863{
864 m_d.setName(n);
865}
866
871template< typename T >
873{
874 return (m_d.getName());
875}
876
882template< typename T >
883QStringList DADataTable< T >::columns() const
884{
885 return columnNames();
886}
887
892template< typename T >
894{
895 QStringList r;
896
897 for (SeriesPtr p : m_d) {
898 r.append(p->getName());
899 }
900 return (r);
901}
902
908template< typename T >
909void DADataTable< T >::setSeriesNames(const QStringList& ns)
910{
911 const int s = ns.size();
912
913 for (int i = 0; i < s; ++i) {
914 if (i < columnCount()) {
915 series(i)->setName(ns[ i ]);
916 } else {
917 SeriesPtr r = makeSeries(ns[ i ]);
918 appendSeries(r);
919 }
920 }
921}
922
929template< typename T >
930typename DADataTable< T >::TablePtr DADataTable< T >::takeByValue(const QString& field, T value) const
931{
932 return (take_by_value(*this, field, value));
933}
934
940template< typename T >
941QPair< QList< typename DADataTable< T >::TablePtr >, QList< T > > DADataTable< T >::groupBy(const QString& field) const
942{
943 return (group_by(*this, field));
944}
945
950template< typename T >
951void DADataTable< T >::orderBy(const QString& sn)
952{
953 order_by(*this, sn);
954}
955
960template< typename T >
962{
963 order_by(*this, cindex);
964}
965
972template< typename T >
973QPair< T, int > DADataTable< T >::lowerBound(const T& v, const QString& sortedfield) const
974{
975 const int r = nameToIndex(sortedfield);
976
977 return (lowerBound(v, r));
978}
979
980template< typename T >
981QPair< T, int > DADataTable< T >::lowerBound(const T& v, int c) const
982{
983 typename DADataTable< T >::SeriesPtr prow = series(c);
984 SeriesIterator ite = std::lower_bound(prow->begin(), prow->end(), v);
985
986 if (ite == prow->end()) {
987 return (qMakePair< T, int >(prow->back(), prow->size() - 1));
988 }
989 size_t dis = std::distance(prow->begin(), ite);
990
991 return (qMakePair< T, int >(*ite, dis));
992}
993
994template< typename T >
995QPair< T, int > DADataTable< T >::upperBound(const T& v, const QString& sortedfield) const
996{
997 const int r = nameToIndex(sortedfield);
998
999 return (upperBound(v, r));
1000}
1001
1002template< typename T >
1003QPair< T, int > DADataTable< T >::upperBound(const T& v, int c) const
1004{
1005 typename DADataTable< T >::SeriesPtr prow = series(c);
1006 SeriesIterator ite = std::upper_bound(prow->begin(), prow->end(), v);
1007
1008 if (ite == prow->end()) {
1009 return (qMakePair< T, int >(prow->back(), prow->size() - 1));
1010 }
1011 size_t dis = std::distance(prow->begin(), ite);
1012
1013 return (qMakePair< T, int >(*ite, dis));
1014}
1015
1020template< typename T >
1022{
1023 m_caseSensitivity = cs;
1024}
1025
1030template< typename T >
1032{
1033 return (m_caseSensitivity == CaseSensitive);
1034}
1035
1036#if (QT_VERSION >= QT_VERSION_CHECK(5, 4, 0))
1037
1038template< typename T >
1039QDebug operator<<(QDebug debug, const DADataTable< T >& t)
1040{
1041 QDebugStateSaver saver(debug);
1042 int colCnt = t.columnCount();
1043 QStringList rns = t.columnNames();
1044 int maxlen = 0;
1045
1046 for (const QString& r : rns) {
1047 //计算列宽
1048 maxlen = qMax(maxlen, r.size());
1049 }
1050
1051 for (int i = 0; i < colCnt; ++i) {
1052 typename DADataTable< T >::SeriesPtr r = t.series(i);
1053 QString name = r->getName();
1054 if (name.size() < maxlen) {
1055 name.leftJustified(maxlen); //补充长度
1056 }
1057 debug.noquote() << name << ":";
1058 int cs = r->size();
1059 if (cs > 10) {
1060 for (int j = 0; j < 5; ++j) {
1061 debug.noquote() << r->at(j) << ",";
1062 }
1063 debug.noquote() << " ...... ";
1064 for (int j = cs - 6; j < cs; ++j) {
1065 debug.noquote() << r->at(j) << ",";
1066 }
1067 } else {
1068 for (int j = 0; j < cs; ++j) {
1069 debug << r->at(j) << ",";
1070 }
1071 }
1072 debug << "\n";
1073 }
1074
1075 return (debug);
1076}
1077
1078#else
1079template< typename T >
1080QDebug operator<<(QDebug debug, const DADataTable< T >& t)
1081{
1082 QDebugStateSaver saver(debug);
1083 int rs = t.columnCount();
1084 QStringList rns = t.columns();
1085 int maxlen = 0;
1086
1087 for (const QString& r : rns) {
1088 maxlen = qMax(maxlen, r.size());
1089 }
1090
1091 for (int i = 0; i < rs; ++i) {
1092 typename DADataTable< T >::SeriesPtr r = t.series(i);
1093 QString name = r->getName();
1094 if (name.size() < maxlen) {
1095 name.resize(maxlen);
1096 }
1097 debug.nospace() << name << ":";
1098 int cs = r->size();
1099 if (cs > 10) {
1100 for (int j = 0; j < 5; ++j) {
1101 debug.nospace() << r->at(j) << ",";
1102 }
1103 debug.nospace() << " ...... ";
1104 for (int j = cs - 6; j < cs; ++j) {
1105 debug.nospace() << r->at(j) << ",";
1106 }
1107 } else {
1108 for (int j = 0; j < cs; ++j) {
1109 debug << r->at(j) << ",";
1110 }
1111 }
1112 debug << "\n";
1113 }
1114
1115 return (debug);
1116}
1117
1118#endif
1119}
1120#endif // SATABLE_H
以列为基础的数据表,和python 的 pandas.DataFrame类似
Definition da_data_table.hpp:112
bool haveColumns(const QString &field) const
判断是否存在Columns
Definition da_data_table.hpp:483
void clear()
清空
Definition da_data_table.hpp:851
TablePtr takeByValue(const QString &field, T value) const
提取某个值等于value作为新表
Definition da_data_table.hpp:930
DADataTable()
构造一个空的数据表
Definition da_data_table.hpp:438
SeriesPtr row(int r) const
获取一行数据
Definition da_data_table.hpp:751
QStringList columnNames() const
获取列的名字序列
Definition da_data_table.hpp:893
QPair< T, int > lowerBound(const T &v, const QString &sortedfield) const
查找第一个大于或等于某个元素的位置
Definition da_data_table.hpp:973
void appendSeries(SeriesPtr ser)
追加一列
Definition da_data_table.hpp:579
void fill(const T &v)
填充元素
Definition da_data_table.hpp:501
int rowCount() const
表的列数
Definition da_data_table.hpp:833
QPair< QList< TablePtr >, QList< T > > groupBy(const QString &field) const
groupby
Definition da_data_table.hpp:941
int columnCount() const
表的行数
Definition da_data_table.hpp:823
QString getName() const
获取表的名字
Definition da_data_table.hpp:872
QStringList columns() const
和pandas统一
Definition da_data_table.hpp:883
void orderBy(const QString &sn)
orderBy
Definition da_data_table.hpp:951
SeriesPtr & series(int c)
获取行引用
Definition da_data_table.hpp:697
const T & at(int r, int c) const
定位单元格
Definition da_data_table.hpp:515
void resize(int r, int c)
改变table 的大小
Definition da_data_table.hpp:465
bool isCaseSensitivity() const
判断是否大小写敏感
Definition da_data_table.hpp:1031
CaseSensitivity
Definition da_data_table.hpp:120
@ CaseInsensitive
大小写不敏感
Definition da_data_table.hpp:121
@ CaseSensitive
大小写敏感
Definition da_data_table.hpp:122
void setMode(Mode m)
设置表格的模式
Definition da_data_table.hpp:839
void setCaseSensitivity(CaseSensitivity cs)
设置名字查询时是否对大小写敏感
Definition da_data_table.hpp:1021
T cell(int r, int c) const
获取单元格
Definition da_data_table.hpp:563
void setName(const QString &n)
设置表的名字
Definition da_data_table.hpp:862
void setSeriesNames(const QStringList &ns)
设置行名,如果是个空的表会生成一个默认行
Definition da_data_table.hpp:909
void fixSize()
以最大列数进行列数修正,保证所有行同列
Definition da_data_table.hpp:800
const T & iloc(int r, int c) const
定位单元格
Definition da_data_table.hpp:539
Mode
Definition da_data_table.hpp:115
@ ExpandMode
扩展模式,表的行是浮动的,如果插入一列比原来要宽,会自动扩充表的原来那些列对应的行数(默认)
Definition da_data_table.hpp:117
@ FixedMode
固定模式,表的行不会随着列的变化而变化
Definition da_data_table.hpp:116
Mode getMode() const
获取模式
Definition da_data_table.hpp:845
系列数据,系列允许设置名字
Definition da_data_table.hpp:19
含有index的值对
Definition da_data_table.hpp:362
序列化类都是带异常的,使用中需要处理异常
Definition AppMainWindow.cpp:44
QPair< QList< typename DADataTable< T >::TablePtr >, QList< T > > group_by(const DADataTable< T > &table, const QString &field)
groupby 对某个字段执行group by操作
Definition da_data_table.hpp:337
std::shared_ptr< DAVector< _DAValueWithIndex< T > > > makeIndexSeries(const typename DADataTable< T >::SeriesPtr &p)
把序列转换为带序号的序列
Definition da_data_table.hpp:388