【问题标题】:Compare two arrays and find the index of uncommon elements in SWIFT 3比较两个数组并找到 SWIFT 3 中不常见元素的索引
【发布时间】:2018-01-25 21:51:55
【问题描述】:

数组是字符串类型。由于加“”比较耗时,所以我把它写成Int。对不起。

我有两个数组,比如 var array1 = [[1,2,3,4,5,6,7,8,9]]

var array2 = [[1,2,3,4],
              [2,3,4,5],
              [2,4,5,6],
              [1,2,3,4,5,6,7,8,9],
              [1,2,3,4,5,6,7,8],
              [2,3,4,5,6,7,8]]

我必须将array2 的每个数组元素与array1 进行比较,并在元素不匹配的地方插入“-”。像这样,

var array2 = [[1,2,3,4,-,-,-,-,-],
              [-,2,3,4,5,-,-,-,-],
              [-,2,-,4,5,6,-,-,-],
              [1,2,3,4,5,6,7,8,9],
              [1,2,3,4,5,6,7,8,-],
              [-,2,3,4,5,6,7,8,-]]

我尝试遍历 array2 中的每个数组并将其与 array1 进行比较,比较索引并将“-”插入到索引位置 i,但我得到了意想不到的结果。

更新

 for item in array2{
var elementsArray = item
for i  in stride(from: 0, to: elementsArray.count, by: 1) {
    if elementsArray[i] != array1[i]
    {
        elementsArray.insert("-", at: i)
    }
    print("elemnt array.....", elementsArray, "\n\n")
}
}

我曾想过通过count 将array2 的每个数组与array1 进行比较,找到不常见元素的索引,然后在该索引位置插入'-'。这种方法对吗?请帮我解决这个问题。

【问题讨论】:

  • array1 应该是一维数组还是数组数组?在后一种情况下,array1 的第 i 个子数组是否应该与 array2 的第 i 个子数组进行比较?
  • array2中的每个数组,其长度能否大于array1的长度?
  • @DávidPásztor array1 只是一维的。
  • 第二个数组中的数字是否总是出现在第一个数组中?数字总是在增加吗?
  • @Adeel no 它不能更大。 array2 中存在的数组的最大长度等于 array1

标签: ios arrays swift3 compare


【解决方案1】:

您想要一个新数组,其中array2 的每一行都替换为 array1,将行中原本不存在的元素替换为“-”:

let array1 = [1,2,3,4,5,6,7,8,9]
let array2 = [[1,2,3,4],
              [2,3,4,5],
              [2,4,5,6],
              [1,2,3,4,5,6,7,8,9],
              [1,2,3,4,5,6,7,8],
              [2,3,4,5,6,7,8]]

let filled = array2.map { row in 
    array1.map {
        row.contains($0) ? String($0) : "-"
    }
}

for row in filled { print(row) }

输出:

[“1”、“2”、“3”、“4”、“-”、“-”、“-”、“-”、“-”] [“-”、“2”、“3”、“4”、“5”、“-”、“-”、“-”、“-”] [“-”、“2”、“-”、“4”、“5”、“6”、“-”、“-”、“-”] [“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“9”] [“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“-”] [“-”、“2”、“3”、“4”、“5”、“6”、“7”、“8”、“-”]

对于大型数组,这可以通过创建Set(row) 来改进 更快的收容检查,或利用该元素 是按递增顺序排列的。

您的方法无法正常工作,因为elementsArray 在迭代时被修改。

【讨论】:

  • 雅皮...!!它工作......非常感谢。 :) 基于 array1 和 array2 结果,还有一个数组 array3 具有不同的数据。问题是我必须通过匹配array2的每个元素来设置array3的值,如array2。请帮忙。
  • @Bella:我试图回答你的问题。如果您还有其他问题,请先尝试使用此答案中提供的工具自行解决。如有必要,请提出一个新问题。
  • 对不起。如果没有array1 怎么办 我必须只为array2 解决问题。我正在尽力解决它,但没有找到正确的方法
  • 我认为要解决没有 array1 的问题,您需要添加一个步骤来查找哪个数组更大,并在这种情况下作为参考,您在 array2 中的更大数组将是您的 array1 @Bella
猜你喜欢
  • 2017-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-16
  • 1970-01-01
相关资源
最近更新 更多