- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在创建一个处理地理信息的程序。我有包含相互接触的地理单位的数据。失败的函数旨在根据人口将相邻单位添加到数组中(例如,它从一个单位开始,然后将人口最多的相邻单位添加到数组中,然后添加接触其中一个单位的人口最多的单位在数组中,并继续此操作,直到达到人口限制)。我这样做的方法是使用 for 循环,然后使用已按人口排序的总单位数组。然后,我使用数组中单元的邻居与总单元数组中每个单元的邻居之间的交集找到第一个(因此人口最多)邻居的索引。以下是我的代码(请原谅笨拙):
func createDistrict () {
if useBoard.isEmpty == false {
useBoard.sort(by: {$0.population > $1.population})
var maxPop = useBoard.first!.population
district.removeAll()
district.append(useBoard.first!)
useBoard.removeFirst()
for i in 0...useBoard.count - 1 {
if useBoard.indices.contains(i) {
if useBoard[i] == nil || district.map({$0.population}).reduce(0,+) > districtMax {
break
}
} else {
break
}
useBoard.sort(by: {$0.population > $1.population})
var superArray:[Precinct] = []
district.forEach { (z) in
superArray += z.neighbors
Array(Set(superArray))
}
var nextPre = useBoard.firstIndex { (l) -> Bool in
Set(l.neighbors).intersection(Set(superArray)).isEmpty == false
}
if nextPre == nil {
break
}else {
var temporary = Set(useBoard[nextPre!].neighbors).intersection(Set(superArray))
var newString = ""
var newTemp = Array(temporary)
for t in 0...newTemp.count - 1 {
var next = useBoard.firstIndex { (k) -> Bool in
k == newTemp[t]
}
newString.append("\(newTemp[t]) (\(next)), ")
}
print("\(useBoard[nextPre!].precinctID) (\(nextPre!)) touches \(newString)")
}
district.append(useBoard[nextPre!])
useBoard.remove(at: nextPre!)
}
}
district.forEach { (p) in
print("\(p.precinctID)")
}
}
在此函数中,使用了 var nextPre = useBoard.firstIndex { (l) -> Bool in Set(l.neighbors).intersection(Set(superArray)).isEmpty == false}
找到人口最多的邻居的索引。但是,当我使用 print
测试它时,我得到了不正确的输出。在下面的摘录中,括号中的值只是索引,并不重要。输出:
2104 (8) touches 1987 (Optional(710)), 2676 (Optional(1591)),
2387 (10) touches 2105 (Optional(2140)),
2274 (11) touches 2273 (Optional(52)), 2386 (Optional(236)),
2275 (14) touches 2276 (Optional(22)), 2105 (Optional(2138)), 2273 (Optional(51)),
2276 (21) touches 2389 (Optional(1638)), 2273 (Optional(50)), 2274 (nil), 2275 (nil), 2277 (Optional(2771)), 2386 (Optional(234)),
2067 (35) touches 2404 (Optional(76)), 2212 (Optional(944)),
2406 (40) touches 2404 (Optional(75)), 2070 (Optional(1771)),
2440 (42) touches 2212 (Optional(942)), 2388 (Optional(497)), 2441 (Optional(1364)),
2273 (46) touches 2386 (Optional(230)), 2276 (nil), 2064 (Optional(384)), 2275 (nil), 2105 (Optional(2133)), 2274 (nil), 2387 (nil),
1795 (55) touches 1891 (Optional(1212)),
1908 (41) touches 2638 (Optional(2568)), 1869 (Optional(474)),
2404 (70) touches 2212 (Optional(938)), 2070 (Optional(1766)), 2069 (Optional(365)), 2068 (Optional(581)), 1743 (Optional(2453)), 2405 (Optional(2442)), 2387 (nil), 2105 (Optional(2130)), 2284 (Optional(2792)),
2736 (70) touches 2548 (Optional(1314)), 2420 (Optional(1305)),
1798 (52) touches 2419 (Optional(270)),
1907 (45) touches 1912 (Optional(1611)), 2737 (Optional(2082)),
如您所见,邻居相差 1。例如,2104 是第一个单位。然后 2387 接触 2105,即 2104 + 1。然后 2274 接触 2386,即 2387 - 1。然后 2275 接触 2105,即 2104 + 1。 .intersection
应该找到第一个接触的单元数组中的单位,但它找到第一个接触单位名称 + 1 的单位。我不知道这是如何发生的,因为地理单位存储在自定义对象中,而不是整数或任何其他数字变量中。这是自定义对象:
class Precinct {
var precinctID:String
var population:Int
var neighbors:[Precinct]
init(precinctID:String, population:Int, neighbors:[Precinct]){
self.precinctID = precinctID
self.population = population
self.neighbors = neighbors
}
}
extension Precinct: Equatable {
static func == (lhs: Precinct, rhs: Precinct) -> Bool {
return lhs.precinctID == rhs.precinctID && lhs.population == rhs.population && lhs.neighbors == rhs.neighbors
}
}
extension Precinct: Hashable {
var hashValue: Int {
return precinctID.hashValue ^ population.hashValue
}
}
extension Precinct: CustomStringConvertible {
var description: String {
return "\(precinctID)"
}
}
出了什么问题以及如何修复它?谢谢。
最佳答案
问题是由于您在迭代 useBoard 的同时删除了 useBoard 的元素。您正在打印索引 "\(newTemp[t]) (\(next)), "
,然后在五行后删除索引;在重复该过程之前。虽然您可以更改正在迭代的集合的值,但切勿同时更改集合的大小。
第一步可能是在运行外循环之前复制 useBoard。保持它不变,以便您迭代其所有内容,但将副本用于所有逻辑。我无法理解您代码的意图。
就哈希而言,这不是您的问题。然而这并不理想。 Swift 提供了一个几乎总是更好的默认哈希值。只需将扩展名更改为此即可让 Swift 合成自己的算法。
extension Precinct: Hashable {}
有几个问题。请删除外循环中对 useBoard 进行排序的调用。这没有任何效果,因为 useBoard 在进入循环之前已经排序了。另外 Array(Set(superArray)) 不会为您做任何事情。
祝你好运。
关于arrays - 设置交集错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56640237/
我有一个现有站点,其数据库设计不正确并且包含大量记录,因此我们无法更改数据库结构。 本期数据库主要包含用户、问题、选项、答案4个表。有一组标准的问题和选项,但对于每个用户,每组问题和选项在答案表中都有
有没有办法找出两个 CGPathRef 是否相交。就我而言,所有 CGPath 都有 closePath。 例如,我有两条路径。一条路径是旋转一定角度的矩形,另一条路径是弯曲路径。两条路径的原点会经常
我目前正在使用 JavaFX 研究不同形状之间的边界相交。我想检测两个多边形在它们的点上而不是在它们的边界上的碰撞(即 2 个多边形)。 请参见图 1:不需要的行为和图 2:需要的行为。 是否有任何现
在我的three.js 场景中,我有一些立方体。我想为用户提供用鼠标选择框的可能性。 这是重要的代码(我使用 Three.js 版本 69。): function init() { [...]
我有一个问题。我想将四边形与四边形相交。 int main(){ typedef boost::geometry::model::point_xy TBoostPoint; typedef b
在 MongoDB 中我们找到了交集的方法,但我们也想实现日期范围排除。让我解释一下。 我们有每个支持团队的每日轮值表。每个支持团队可以每 15 分钟预订一次,持续 5-25 分钟(大约)。每个团队有
目录 1、列表求并集 1. union_by 2、列表求交集 1. intersection_by
我有以下查询: select id from t1 intersect select id from t2 intersect select id from t3 id 在某些表中可能不是唯一的,所以
需要完成此实现才能使用 UseSet 类。不确定我所实现的是否100%正确。 但是我需要 Union 和 SysDiff 方面的帮助。 public class Set { private Ar
我的程序打印主构造函数,但不返回 3 个底部函数,而是返回其编译结果。我哪里出错了? import java.util.*; public class Main { public static v
我正在尝试找到两个不同列表列表的交集。换句话说,找出 list1 中的所有列表是否与列表 2 中的任何列表相交。 列表1: [[1,4],[1,6],[6,8],[8,10]] 列表2: [[],
我正在尝试从 2 个已知 BST 的交集创建一个新的 BST。我在第二种情况下的 intersect2 方法中收到 NullPointerException,位于“cur3.item.set_acco
这个问题已经有答案了: self referential struct definition? (9 个回答) 已关闭 7 年前。 我有一个脚本 a.h #include b.h type
我在 user_profile 表上运行搜索,其中包含单个索引和复合索引: SELECT ••• FROM user_profile up JOIN auth_user
我正在尝试为(公寓)列表创建过滤器,通过 apartsments_features 表与 apartment features 建立多对多关系。 我只想包括具有所有某些功能(在表格上标记为"is")的
我想从两个给定的嵌套列表中创建一个新的嵌套列表(每个列表中都有唯一的项目),以便新的嵌套列表是两个列表的最大公共(public)交集。 一个例子希望能帮助阐明我的问题: old1 = [[1,
我在 Django 中有两个模型,我不确定如何编写它们(是否有一个抽象模型并继承等等......或者有两个不同的模型)但通常我有两种类型的对象 A 和 B。 A 和 B 完全相同,因为它们只是项目。它
我有一个像这样的数组 arrays = [ ['a', 'b', 'c', 'd'], ['a', 'b', 'c', 'g'], ['a',
我正在通过向 Mario Zechner 的开源跳线游戏添加更多功能来学习 libgdx。我正在尝试制作一些带有角度的平台并遇到旋转矩形的碰撞检测问题。 我关注了this解决方案并使用多边形和我的矩形
我有一个包含对象的数组: let data = [[{a:0}, {b:1}], [{a:1}, {b:1}]] 现在我想制作一个 lodash intersection这两个数组,返回 [{b:1}
我是一名优秀的程序员,十分优秀!