集合是其中没有元素重复的集合,其可以根据排序标准(“有序集合”)枚举其元素或者不保留顺序(“无序集合”)。
我有两个 Person 对象列表(List1 和 List2): 公共类人{ 对象 ID id; 私人名单名称; 私有整数年龄; } 我想比较列表,无论在哪里......
似乎检查设置的字典键要快一点: 随机导入 导入字符串 导入时间 重复=3 数字 = 1000 def 时间(语句,_setup=None): 打印分钟( timeit.定时器(
我有以下问题: 我有项目列表(数组),每个项目都属于类别。我有规则规定两个类别中哪一个可以放在一起。我有方法 get_rule_by_item(itemId1,i...
我有以下清单: a=[{'列表1': ['35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52']}, {'列表2': ['1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 ,23,24,25,26,27,28,29,30,31,32,33...
我目前正在开发一款游戏,选择Java作为我的主要开发平台。我现在有点后悔,因为我遇到了一个我不完全理解的重大内存泄漏。我到目前为止...
symmetry_difference() python 中的多组
我有三组,我想获得对称差。 素数 = {1, 2, 3, 5, 7, 11} 赔率 = {1, 3, 5, 7, 9, 11} 三分=。 {1,3,6,9,12} 使用常规方式 集合(素数)^集合(赔率)^集合(
var arrayorset=["0","1","21"] Swift 是类型推断和类型安全,但如何快速知道集合和数组之间的区别 当需要数组而不是集合时,这将是问题
在 Java 中计算两个 HashMap 的 keySet 的并集
我想计算两个哈希图的键的并集。我写了下面的代码(下面是MWE),但是我 得到 UnsupportedOperationException。实现这个目标有什么好处呢? 导入java....
MDN 引用了 JavaScript 的 Set 集合抽象。我有一个对象数组,我想将其转换为一个集合,以便我能够按名称删除 (.delete()) 各种元素: var 数组 = ...
如何找到多个子集之间的最大交集(k个集合中n个中最常见的元素)?
举个例子: set_0={0,3,4} set_1={1,3,4} set_2={1,5,23,8,24} set_4={1,2,6,10} set_5={1,60,34,2} set_6={1,45,32,4} set_7={1,6,9,14} set_8={1,56,3,23} set_9={1,34,23,3} all_intersection=设置。
在Python中迭代同一个集合是否保证我有完全相同的顺序(假设它是同一个集合:我不会在两次迭代之间修改它),或者我应该将集合转换为...
最近,我一直在研究一些 Python 模块,以了解它们的行为以及它们的实现的优化程度。谁能告诉Python使用什么算法来执行该集合
使用 Java 流从带有 Set 值的 Map 中查找公共元素集
假设我有一个 HashMap,其中包含作为字符串的键和作为整数集的值(Map>)。 并假设地图填充有以下值: 地图 假设我有一个 HashMap,其中包含作为 String 的键和作为 Set (Integer) 的 Map<String, Set<Integer>> 的值。 并假设地图填充有以下值: Map<String, Set<Integer>> map = new HashMap<>(); map.put("w1", Set.of(1,3,4,6,7)); map.put("w2", Set.of(2,3,4,5,7)); map.put("w3", Set.of(1,2,3,5,7)); 如何使用 Java 中的 Streams 找到所有键的通用值集?例如:在这种情况下,所有键的公共值集是 Set.of(3,7)。 首先请注意,使用流并不总是最干净的方式。 我的想法是获取第一组并迭代其余组以检查它们是否全部包含它: Set<Integer> res = map.values().iterator().next().stream() .filter(item -> map.values().stream().allMatch(set -> set.contains(item))) .collect(Collectors.toSet()); 这是一个简洁的解决方案,但它会检查第一组两次。您还可以添加检查以查看地图是否包含任何条目。 我的方法是首先将不同的值分组并进行计数。然后只保留那些计数等于映射中条目数的条目。这是可行的,因为每个集合只能包含该值一次。 map.values().stream().flatMap(Set::stream) .collect(Collectors.groupingBy(Function.identity(), Collectors.counting())) .entrySet().stream().filter(e -> e.getValue() == map.size()) .map(Map.Entry::getKey).collect(Collectors.toSet()); 这可以通过利用 collect() 操作来完成。 此方法背后的逻辑是从值集合中获取随机集,用一个新集包装它以避免突变,然后使用retainlAll()方法将所有集组合在一起一个。 即使值由不可变集表示(如问题中的示例),这也不是问题,因为它们将被完整保留。唯一会发生突变的集合是由collect()内的supplier函数提供的新集合。 如果地图空,可能会出现问题。 在这种情况下,任何从values集合中获取first set的尝试都会失败。因此,这种情况必须单独处理,如下面的方法getFirst()所示。 它可能看起来像: public static Set<Integer> getIntersectionStream(Map<String, Set<Integer>> map) { return map.values().stream() .collect(() -> getFirst(map), Set::retainAll, Set::addAll); } 相同的逻辑可以迭代实现: public static Set<Integer> getIntersectionLoop(Map<String, Set<Integer>> map) { Set<Integer> intersection = new HashSet<>(getFirst(map)); for (Set<Integer> next: map.values()) { intersection.retainAll(next); } return intersection; } 方法 get getFirst() 负责从 values 集合中检索 random set。在空映射的情况下,它将返回一个空的不可修改的集合,否则,它将产生流返回的第一个集合。 注意,在这种情况下,在可选项上调用 get() 是安全的,因为我们期望结果出现。 public static Set<Integer> getFirst(Map<String, Set<Integer>> map) { return map.isEmpty() ? Collections.emptySet() : new HashSet<>(map.values().stream().findFirst().get()); } 主要 public static void main(String[] args) { Map<String, Set<Integer>> map = Map.of("w1", Set.of(1,3,4,6,7), "w2", Set.of(2,3,4,5,7), "w3", Set.of(1,2,3,5,7)); System.out.println(getIntersectionStream(map)); System.out.println(getIntersectionLoop(map)); } 输出 [3, 7] [3, 7] Set<Integer> commonValues(Map<String, Set<Integer>> map) { if (map.isEmpty()) { return new HashSet<>(); } Set<Integer> intersection = new HashSet<>(map.values().iterator().next()); map.values().forEach(v -> intersection.retainAll(v)); return intersection; } 通用且可能有效的解决方案可能是: public static <T> Set<T> retain(Map<?, Set<T>> map) { Iterator<Set<T>> it = map.values().iterator(); if (!it.hasNext()) { return new HashSet<>(); } Set<T> result = new HashSet<>(it.next()); while (it.hasNext() && !result.isEmpty()) { result.retainAll(it.next()); } return result; } 注意 !result.isEmpty(),这是提前退出条件。 IE。如果结果为空,则这些集合没有共同元素。 注意:这是受到MikeFHay的answer的启发。 如果你确实想使用流,并且可以保证Set是可变的,那么你也可以使用reduce()终端操作: public static <T> Set<T> retain(Map<?, Set<T>> map) { return map.values().stream() .reduce((a, b) -> { a.retainAll(b); return a; }) .orElse(Set.of()); } 但请注意,这会修改并返回地图中的第一个集合。 这个简单的版本使用带有集合操作的流来通过查找其中一个成员来填充 intersections,并 retainAll 来匹配所有其他成员: Set<Integer> intersection = new HashSet<>(); map.values().stream().limit(1).forEach(intersection::addAll); map.values().stream().forEach(intersection::retainAll); 我首先建议不要使用流,只需如下所示简单地执行即可。这确实删除了地图的一个元素。 你可以只做 map.get("w1") 并做一个多余的 retainAll。 请注意,由于您使用 Map.of 创建了一个不可变集,我必须制作一个副本以允许修改 result。 Set<Integer> result = new HashSet<>(map.remove("w1")); for (Set<Integer> set : map.values()) { result.retainAll(set); } 这是一个流解决方案。 为了避免使用初始化程序进行归约操作,我将使用 reducing Collector。该收集器返回一个 Optional,因此必须使用 orElse 来检索集合并允许空地图。 Set<Integer> result = map.values().stream() .collect(Collectors.reducing((a, b) -> { a.retainAll(b); return a; }))..orElse(new HashSet<>()); System.out.println(result); 以上都会打印 [3, 7] 显示的解决方案假定已正确填充 Map。 完整的解决方案将包括检查 在我看来,这是最好的解决方案: map.values().stream().reduce((s1, s2) -> { Set<Integer> s3 = new HashSet<>(s2); s3.retainAll(s1); return s3; }).orElse(new HashSet<>()); 它是通过集合相交而减少的地图值流。 这可以使用Stream.reduce来解决: Set<Integer> commonElements = map.values().stream() .reduce((s1, s2) -> s1.stream() .filter(s2::contains) .collect(Collectors.toUnmodifiableSet())) .orElseThrow(NoSuchElementException::new); 归约的每一步都会创建一个新的Set,其中仅包含两个集合之间的共同元素。 我在这里没有做的一个简单的优化(为了简单起见)是有条件地交换 s1 和 s2 ,以便较小的集合被流式传输,因为这是基于大小的线性时间发生的套装中的。
在 Java 中使用流从值为集合的 Map 中查找公共元素集
假设我有一个 HashMap,其中包含作为字符串的键和作为整数集的值(Map)。 并假设地图填充有以下值: 地图 假设我有一个 HashMap,其中包含作为字符串的键和作为整数集的值(Map)。 并假设地图填充有以下值: Map<String, Set<Integer>> map = new HashMap<>(); map.put("w1", Set.of(1,3,4,6,7)); map.put("w2", Set.of(2,3,4,5,7)); map.put("w3", Set.of(1,2,3,5,7)); 如何使用 Java 中的 Streams 找到所有键的通用值集?例如:在这种情况下,所有键的公共值集是 Set.of(3,7) 首先请注意,使用流并不总是最干净的方式。 我的想法是获取第一组并迭代其余组以检查它们是否全部包含它: Set<Integer> res = map.values().iterator().next().stream() .filter(item -> map.values().stream().allMatch(set -> set.contains(item))) .collect(Collectors.toSet()); 这是一个简洁的解决方案,但它会检查第一组两次。您还可以添加检查以查看地图是否包含任何条目。 Set<Integer> commonValues(Map<String, Set<Integer>> map) { if (map.isEmpty()) { return new HashSet<>(); } Set<Integer> intersection = new HashSet<>(map.values().iterator().next()); map.values().forEach(v -> intersection.retainAll(v)); return intersection; } 我的方法是首先将不同的值分组并进行计数。然后只保留那些计数等于映射中条目数的条目。这是可行的,因为每个集合只能包含该值一次。 map.values().stream().flatMap(Set::stream) .collect(Collectors.groupingBy(Function.identity(), Collectors.counting())) .entrySet().stream().filter(e -> e.getValue() == map.size()) .map(Map.Entry::getKey).collect(Collectors.toSet()); 这可以通过利用 collect() 操作来完成。 此方法背后的逻辑是从值集合中获取随机集,用一个新集包装它以避免突变,然后使用retainlAll()方法将所有集组合在一起一个。 即使值由不可变集表示(如问题中的示例),这也不是问题,因为它们将被完整保留。唯一会发生突变的集合是由collect()内的supplier函数提供的新集合。 如果地图空,可能会出现问题。 在这种情况下,任何从values集合中获取first set的尝试都会失败。因此,这种情况必须单独处理,如下面的方法getFirst()所示。 它可能看起来像: public static Set<Integer> getIntersectionStream(Map<String, Set<Integer>> map) { return map.values().stream() .collect(() -> getFirst(map), Set::retainAll, Set::addAll); } 相同的逻辑可以迭代实现: public static Set<Integer> getIntersectionLoop(Map<String, Set<Integer>> map) { Set<Integer> intersection = new HashSet<>(getFirst(map)); for (Set<Integer> next: map.values()) { intersection.retainAll(next); } return intersection; } 方法 get getFirst() 负责从 values 集合中检索 random set。在空映射的情况下,它将返回一个空的不可修改的集合,否则,它将产生流返回的第一个集合。 注意,在这种情况下,在可选项上调用 get() 是安全的,因为我们期望结果出现。 public static Set<Integer> getFirst(Map<String, Set<Integer>> map) { return map.isEmpty() ? Collections.emptySet() : new HashSet<>(map.values().stream().findFirst().get()); } 主要 public static void main(String[] args) { Map<String, Set<Integer>> map = Map.of("w1", Set.of(1,3,4,6,7), "w2", Set.of(2,3,4,5,7), "w3", Set.of(1,2,3,5,7)); System.out.println(getIntersectionStream(map)); System.out.println(getIntersectionLoop(map)); } 输出 [3, 7] [3, 7] 通用且可能有效的解决方案可能是: public static <T> Set<T> retain(Map<?, Set<T>> map) { Iterator<Set<T>> it = map.values().iterator(); if (!it.hasNext()) { return new HashSet<>(); } Set<T> result = new HashSet<>(it.next()); while (it.hasNext() && !result.isEmpty()) { result.retainAll(it.next()); } return result; } 注意 !result.isEmpty(),这是提前退出条件。 IE。如果结果为空,则这些集合没有共同元素。 注意:这是受到MikeFHay的answer的启发。 如果你确实想使用流,并且可以保证Set是可变的,那么你也可以使用reduce()终端操作: public static <T> Set<T> retain(Map<?, Set<T>> map) { return map.values().stream() .reduce((a, b) -> { a.retainAll(b); return a; }) .orElse(Set.of()); } 但请注意,这会修改并返回地图中的第一个集合。 这个简单的版本使用带有集合操作的流来通过查找其中一个成员来填充 intersections,并 retainAll 来匹配所有其他成员: Set<Integer> intersection = new HashSet<>(); map.values().stream().limit(1).forEach(intersection::addAll); map.values().stream().forEach(intersection::retainAll); 我首先建议不要使用流,只需如下所示简单地执行即可。这确实删除了地图的一个元素。 你可以只做 map.get("w1") 并做一个多余的 retainAll。 请注意,由于您使用 Map.of 创建了一个不可变集,我必须制作一个副本以允许修改 result。 Set<Integer> result = new HashSet<>(map.remove("w1")); for (Set<Integer> set : map.values()) { result.retainAll(set); } 这是一个流解决方案。 为了避免使用初始化程序进行归约操作,我将使用 reducing Collector。该收集器返回一个 Optional,因此必须使用 orElse 来检索集合并允许空地图。 Set<Integer> result = map.values().stream() .collect(Collectors.reducing((a, b) -> { a.retainAll(b); return a; }))..orElse(new HashSet<>()); System.out.println(result); 以上都会打印 [3, 7] 显示的解决方案假定已正确填充 Map。 完整的解决方案将包括检查 在我看来,这是最好的解决方案: map.values().stream().reduce((s1, s2) -> { Set<Integer> s3 = new HashSet<>(s2); s3.retainAll(s1); return s3; }).orElse(new HashSet<>()); 它是通过集合相交而减少的地图值流。 这可以使用Stream.reduce来解决: Set<Integer> commonElements = map.values().stream() .reduce((s1, s2) -> s1.stream() .filter(s2::contains) .collect(Collectors.toUnmodifiableSet())) .orElseThrow(NoSuchElementException::new); 归约的每一步都会创建一个新的Set,其中仅包含两个集合之间的共同元素。 我在这里没有做的一个简单的优化(为了简单起见)是有条件地交换 s1 和 s2 ,以便较小的集合被流式传输,因为这是基于大小的线性时间发生的套装中的。
当我阅读 SymPy 1.13.0 发行说明时,一个条目引起了我的注意(强调我的): Float 和涉及 Float 的表达式的哈希函数现在遵循哈希不变量...
我试图理解集合在Python内部是如何运作的。 我编写了一个元组的子类,如下所示: 从随机导入随机 类球(元组): def __hash__(自身): a=超级()。
我正在努力实施两个“标志”栏,以显示申请人是否已经通过了称为“清算”的流程,以及该申请人是否有过之前的标准申请
CurrentDb.执行strSQL - 无法获取表值以设置为新用户输入
Access BD, VBA / SQL Newby -- 请原谅我的无知 我有一个表单,应该更新输入到 PWord1 中的用户密码,然后重新输入到 PWOrd2 中。如果他们做的一切都是正确的那么......