我从Rest Response适配器获得的内存表中具有RGBA值的数据组合,如下所示:
"R", "A"
"B"
"A","R"
"R","G"
"B"
...
我需要根据出现的最大次数对这些数据进行排序,或者在表内重复。例如,值"R","A" = "A","R
表示此值的计数为2,依此类推。
我当时正在考虑使用Dictionary,但是它没有一种方法来计算值并考虑RA = AR。而且,如果我为每个值循环,都将花费很长时间,那么我应该如何解决这个问题呢?
答案 0 :(得分:0)
似乎您有一些非常具体的内容。在这种情况下,您可以使用位操作对其进行优化:
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]
。