当前位置: 首页 > 知识库问答 >
问题:

比较Swift中的两个元组列表是否重复

葛志国
2023-03-14

我将在序言中说我使用的是Swift1.2。我目前正在研究一个广度优先搜索算法,我以前在其他语言中实现过这个算法,比如javaScript或Python。

真的,我所要求的是一个优雅的方法来找到这两个之间的重复...

var visited: [(x: Int, y: Int)] = []
var Walkable = checkForWalkable(gridFile, Eval) // returns list of tuples that are walkable 

outputs:
Checked for walkable: [(28, 22), (27, 21), (28, 20), (29, 21)]
visited: [(28, 22), (28, 23), (27, 22), (28, 21), (29, 22), (28, 24),(27, 23), (29, 23), (26, 22), (27, 21)]     
New List: [(27, 21), (29, 21)]
Current Queue: [(28, 21), (29, 22), (28, 24), (27, 23), (29, 23), (26, 22), (27, 21), (27, 21), (29, 21)]

上面的新列表表示可以添加的新节点(不是重复的)问题是...复制的确实会被添加。下面是我的乱七八糟的代码:

func findUniqeTuples(A: [(x:Int,y:Int)], B: [(Int,Int)]) ->  [(Int,Int)] {

var indexArray:[Int] = []

for element in A { // visited

    var count = 0

    for items in B { // walkable

        if element.0 == items.0  && element.1 == items.1{

            indexArray.append(count)

        }
        count++

    } // end for

}// end for

var array = B
for i in indexArray{
   array.removeAtIndex(i)
}

return array
}

共有1个答案

严远
2023-03-14

这是因为您正在按随机顺序移除带有索引的元素。移除前面的元素会使要移除的其余元素移位,因此索引指示错误的元素。以下内容将对您有效。

for (i, e) in enumerate(B) {
    for items in A {
        if e.0 == items.0 && e.1 == items.1 {
            indexArray.append(i)
        }
    }
}
var array = B
for i in reverse(indexArray) {
    array.removeAtIndex(i)
}

在Swift 2.0中,reverseenumerate现在都被定义为方法,因此应该是:

for (i, e) in B.enumerate() { /* ... */ }

for i in indexArray.reverse() { /* ... */ }
 类似资料:
  • 我有以下数组列表 现在我需要比较这两个数组,并检查是否有id中的任何值存在于empIds中。如果是,我需要以布尔值true退出。我是这样做的。 但这需要很多时间。有人能帮我优化一下吗?

  • 我有两个表,分别是产品和采购: PRODUCTS表-将获得购买的所有新产品。这意味着表prroducts中不存在相同的productname。所有独特产品列表 采购表-具有唯一purchase_id的所有采购产品的列表。 > 如果要在PURCHASE中添加或插入值,表PRODUCTS将获得PURCHASE的所有值,但前提是PURCHASE中的productname不存在于PRODUCTS中的'pr

  • 这与Java比较两个列表的不同之处在于,我需要能够在jUnit中断言相等性,而不仅仅是比较列表。

  • 我有一个关于列表比较器的问题。我有一个带有表格的网页应用程序。我可以在这个表格中编辑数据,也可以删除行。当我编辑数据时,标准比较器工作正常,但当我删除行时,我有问题。这个问题很常见(我想),当我删除一行时,javers比较旧列表和现在的列表时,看起来是这样的:旧列表有两个对象,现在列表有一个对象(我删除了第一个),现在javers不知道哪个对象被删除了,他比较旧列表中的第一个对象和新列表中的第二个

  • 我必须将元组与元组列表进行比较,如果整数小于列表中的任何元组,则返回True。例如,如果我有将返回True,因为单独元组(“番茄”,10,5)中的整数比列表中的元组(“橙色”,11,6)小,但是如果我有将返回False。 我试试这个 但不工作时,它应该返回假,我不知道为什么? 注意:字符串对于这个问题并不重要,我必须忽略它。

  • 问题内容: 比较两个NumPy数组是否相等的最简单方法是什么(其中相等定义为:对于所有索引i:,A = B iff )? 简单地使用就会给我一个布尔数组: 我是否必须确定该数组的元素是否相等,或者是否有更简单的比较方法? 问题答案: 测试数组(A == B)的所有值是否均为True。 注意:也许您还想测试A和B形状,例如 特殊情况和替代方法 (来自dbaupp的回答和yoavram的评论) 应当指