同时在两个列表上循环,同时在每个步骤比较并存储每个循环的结果



所以,我有两个字符串列表的ArrayList

var a: ArrayList<List<String>> = arrayListOf(listOf("a", "b"), listOf("d"), listOf("g", "f"), listOf("j"))
var b: ArrayList<List<String>> = arrayListOf(listOf("a", "b"), listOf("c", "d"), listOf("f", "g"), listOf("k"))

我想同时迭代ArrayLists a和b,以相应地在它们的索引I处获得它们的元素,比较它们,并存储它们是否相等,例如,获得a的第一个元素,即["a","b"]和b的第一个元件,即["a","b"]。检查这两个第一个元素的大小和内部值是否相等(在本例中,它们相等(,并适当地存储true或false(在本案中,true(。移到a和b的第二个元素,即["d"]和["c","d"。检查它们是否也相等(在这种情况下,大小和值都不相等(,并存储结果(在这种情形下,为false(。现在转到a和b的第三个元素,即["g","f"]和["f","g"]。他们平等吗?(在这种情况下,是的,大小和值都是。尽管它们彼此相反,但仍然相等(。存储结果(在本例中为true(。等等

到目前为止,我尝试在for循环中使用for循环。结果是灾难性的。根本不是我想要的。

zip函数通过索引匹配两个可迭代项。后面的lambda用于将两个匹配的值转换为结果列表中所需的值。在这种情况下,我们只想看看它们是否相等。用==比较两个列表会分别比较它们的每个元素,但由于您希望顺序无关紧要,因此应该首先对它们进行排序,以将其从比较中删除。

val result = a.zip(b) { x, y -> x.sorted() == y.sorted() }

如果内部列表很长,您也可以通过比较大小来缩短排序。

val result = a.zip(b) { x, y -> x.size == y.size && x.sorted() == y.sorted() }

最新更新