首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何比较列表并有效地获取最频繁的对?

如何比较列表并有效地获取最频繁的对?
EN

Stack Overflow用户
提问于 2011-12-02 12:12:59
回答 2查看 452关注 0票数 1

我有很多清单,我想比较他们,并得到顶级对。如果两个不同的数字同时存在于一个列表中,它们是对的。

1 => 1 4 5 6 0 7

表2 => 2 3 8 6 1 9

列表3 => 4 7 1 3 5 6

1,6-3倍(list1,list2,list3) 顶级对

1,5-2次(list1,list3)

4,5 -2次(list1,list3)

2,3 -1次(仅为list2)

如何有效地做到这一点?

注意:列表中没有相同的数字。所有的数字在一个列表中都是不同的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-02 12:23:12

你用这些列表作为集合。为了更好地匹配使用,首先对所有列表进行排序并删除重复项(如果可用,则使用set数据结构)。

从每个集合生成所有对,计算哈希表中出现的次数,以对作为键,以整数作为值。生成可以通过简单的嵌套循环来完成。根据哈希表中的值对键进行排序。

票数 0
EN

Stack Overflow用户

发布于 2011-12-02 13:27:30

一种可能的解决办法。

对每个列表进行排序,并转换为10位二进制数字。

e.g

列表一

代码语言:javascript
运行
复制
  9  8  7  6  5  4  3  2  1  0
  N  N  Y  Y  Y  Y  N  N  Y  Y  = 243

清单二

代码语言:javascript
运行
复制
  9  8  7  6  5  4  3  2  1  0
  Y  Y  N  Y  N  N  Y  Y  Y  N  = 846

清单三

代码语言:javascript
运行
复制
  9  8  7  6  5  4  3  2  1  0
  N  N  Y  Y  Y  Y  Y  N  Y  N  = 250

预生成对的所有可能值。

i.e

代码语言:javascript
运行
复制
 0,1 = 3
 0,2 = 5
 ...
 1,5 = 34
 ...
 5,7 = 160
 ...
 8,9 = 768

创建一个值和计数的列表(为了方便起见,我包括了对的文本表示)

例如:

代码语言:javascript
运行
复制
public class Details {
    public string Pair { get; set; }
    public int Value { get; set; }
    public int Count { get; set; }
}

// selection only
public readonly static List<Details> PairDetails = new List<Details>() {
    new Details{Pair = "0,1", Value = 3},
    new Details{Pair = "0,2", Value = 5},
    new Details{Pair = "1,5", Value = 34},
    new Details{Pair = "1,6", Value = 66},
    new Details{Pair = "2,3", Value = 12},
    new Details{Pair = "4,5", Value = 48}
};

然后遍历成对和列表。

代码语言:javascript
运行
复制
foreach (var details in PairDetails) {
    foreach (var value in values) {
        if ((value & details.Value) == details.Value) {
            details.Count++;
        }
    }
}

var most = PairDetails.Where(dtls => dtls.Count == PairDetails.Max(dt => dt.Count)).ToList(); 

这将给出一个列表,列出在列表中发生的次数最多的所有对。

hth,

艾伦。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8356167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档