数组和反向给出相同的结果但不相等

时间:2019-07-17 05:33:04

标签: arrays swift reverse

我遇到了一种难以理解的情况。我有一个字符串数组,然后反转,但它打印相同的数组,而不是反转...

比较时,编译器说它们不相等

下面是代码...

请帮助我理解这种现象

<scroll-view-test ScrollViewName="scrollView"
                 ScrollViewContentHeight="100%"></scroll-view-test>

<style>
    .photo {
        display: inline-block;
        background-size: cover;
        background-repeat: no-repeat;
        background-position: center center;
        width: inherit;
        height: inherit;
    }

    .photo1 {
        background-image: url("https://www.woodlandtrust.org.uk/media/100078482/Sycamore01.jpg?cb=-11897985&preset=gallery-tab-main-image");
    }

    .photo2 {
        background-image: url("https://statesymbolsusa.org/sites/statesymbolsusa.org/files/styles/symbol_thumbnail__medium/public/primary-images/Applesfreshpicked.jpg?itok=YmYkBfY7");
    }
</style>

我期望输出是 [“ Paul”,“ Joy”,“ Andy”]之后

let names = ["Andy", "Joy", "Paul"]
print(names) // Prints  ["Andy", "Joy", "Paul"]
print(names.reversed()) 
//Prints ReversedCollection<Array<String>>(_base: ["Andy", "Joy", "Paul"])`

//Prints Not equal
if names == names.reversed() {
    print("Equal")
} else {
    print("Not Equal")
}

4 个答案:

答案 0 :(得分:2)

reversed()的调用不会修改数组。它将视图返回到原始数组。

调用print(names.reversed())时,它会打印该反向列表,但是names本身保持不变。

names == names.reversed()唯一正确的时间是该数组为空还是“回文”数组。

还要记住,您已将names声明为常量(使用let),因此应该很好地暗示names未被修改。

您可以创建一个新数组:

let reversedNames = names.reversed()

该新数组将具有相反的值。

答案 1 :(得分:0)

结果尚未处理(ReversedCollection为lazy)。

请尝试映射结果:

ReversedCollection

答案 2 :(得分:0)

如Apple文档所述

https://developer.apple.com/documentation/swift/array/1690025-reversed

  

您可以调用此reversed()方法来反转集合,而无需为其元素分配新的空间。 ReversedCollection实例包装基础集合,并以相反的顺序提供对其元素的访问。本示例以相反的顺序打印字符串的字符:

let word = "Backwards"
for char in word.reversed() {
    print(char, terminator: "")
}
// Prints "sdrawkcaB"
     

如果您需要相同类型的反向集合,则可以使用该集合的基于序列的或基于集合的初始化器。例如,要获取字符串的反向版本,请反向其字符并从结果中初始化一个新的String实例

let reversedWord = String(word.reversed())
print(reversedWord)
// Prints "sdrawkcaB"

根据您的情况,您需要创建一个如下所示的新实例

let reversedArray = names.reversed()
print(reversedArray) 
// Prints ["Paul", "Joy", "Andy"]

答案 3 :(得分:0)

写完后

print(names.reversed()) 

// Prints ReversedCollection>(_ base:[“ Andy”,“ Joy”,“ Paul”])`

1)。您的数组被颠倒了,但是没有存储在名称中,因此名称保持不变。

2)。当您在打印时反转数组时,将显示ReversedCollection,以便反转集合,但现在不存储它,因此仅管理反向数组的内部。

如果您将其存储在某个对象中,则打印该对象,然后显示反转。

like:

let reversedName = names.reversed()
print(reversedName)

所以它是反向打印数组。