根据最大发生次数对数据组合进行排序

问题描述 投票:-2回答:1

我在Rest响应适配器的内存表中有RGBA值的数据组合,如下所示:

"R", "A"
"B"
"A","R"
"R","G"
"B"
...

我需要根据表中出现或重复的最大值对这些数据进行排序。例如,值"R","A" = "A","Rthis表示该值的计数为2,依此类推。

我正在考虑使用Dictionary但它没有计算值的方法并考虑RA = AR。如果我循环每个值,将需要很长时间,所以我应该如何解决这个问题?

delphi
1个回答
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]

© www.soinside.com 2019 - 2024. All rights reserved.