我在Rest响应适配器的内存表中有RGBA值的数据组合,如下所示:
"R", "A"
"B"
"A","R"
"R","G"
"B"
...
我需要根据表中出现或重复的最大值对这些数据进行排序。例如,值"R","A" = "A","R
this表示该值的计数为2,依此类推。
我正在考虑使用Dictionary但它没有计算值的方法并考虑RA = AR。如果我循环每个值,将需要很长时间,所以我应该如何解决这个问题?
看来你有一些非常具体的东西。在这种情况下,您可以使用位操作对其进行优化:
type
TCounts = array[0..15] of Integer;
const
RGBA_R = 1;
RGBA_G = 2;
RGBA_B = 4;
RGBA_A = 8;
function GetCounts(const Strings: array of string): TCounts;
var
i, j, k: Integer;
s: string;
begin
Fillchar(Result, Sizeof(Result), 0);
for i := 0 to Length(Strings) - 1 do
begin
k := 0;
s := Strings[i];
for j := 1 to Length(s) do
case s[i] of
'R': k := k or RGBA_R;
'G': k := k or RGBA_G;
'B': k := k or RGBA_B;
'A': k := k or RGBA_A;
'"', ' ', ',': ; // do nothing
else
// handle error here
end;
Inc(Result[k]);
end;
end;
R, G, B
的所有组合的总数是Result[RGBA_R or RGBA_G + RGBA_B]
。