@@ -1731,7 +1731,8 @@ void Column::labelsOrderByValue(bool doDbUpdateEtc)
1731
1731
replaceDoublesTillLabelsRowWithLabels (labelsTempCount ());
1732
1732
1733
1733
doublevec asc = valuesNumericOrdered ();
1734
- size_t curMax = asc.size ()+1 ;
1734
+ auto alpha = valuesAlphabeticalOffsets ();
1735
+ size_t ascMax = asc.size ()+1 ;
1735
1736
std::map<double , int > orderMap;
1736
1737
1737
1738
for (size_t i=0 ; i<asc.size (); i++)
@@ -1747,7 +1748,7 @@ void Column::labelsOrderByValue(bool doDbUpdateEtc)
1747
1748
else
1748
1749
ColumnUtils::getDoubleValue (label->originalValueAsString (), aValue);
1749
1750
1750
- label->setOrder (!std::isnan (aValue) ? orderMap[aValue] : curMax++ );
1751
+ label->setOrder (!std::isnan (aValue) ? orderMap[aValue] : alpha[label] + ascMax );
1751
1752
}
1752
1753
1753
1754
_sortLabelsByOrder ();
@@ -1776,6 +1777,26 @@ doublevec Column::valuesNumericOrdered()
1776
1777
return doublevec (values.begin (), values.end ());
1777
1778
}
1778
1779
1780
+ std::map<Label*, size_t > Column::valuesAlphabeticalOffsets ()
1781
+ {
1782
+ std::map<Label*, size_t > labelMap;
1783
+ Labels alphaLabels;
1784
+
1785
+ for (Label * label : _labels)
1786
+ if (!label->originalValue ().isDouble ())
1787
+ alphaLabels.push_back (label);
1788
+
1789
+ std::sort (alphaLabels.begin (), alphaLabels.end (), [](const Label * l, const Label * r)
1790
+ {
1791
+ return l->originalValueAsString () < r->originalValueAsString ();
1792
+ });
1793
+
1794
+ for (size_t l=0 ; l<alphaLabels.size (); l++)
1795
+ labelMap[alphaLabels[l]] = l;
1796
+
1797
+ return labelMap;
1798
+ }
1799
+
1779
1800
void Column::valuesReverse ()
1780
1801
{
1781
1802
JASPTIMER_SCOPE (Column::valuesReverse);
0 commit comments